Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

aus C1-C5 muss C1, C2, C3, C4, C5.

aus C1-C5 muss C1, C2, C3, C4, C5.
08.09.2016 12:04:46
Hannes
Hallo ihr Lieben,
ich habe folgendes Problem:
Bezeichner für eine Zuordnung werden vom Kunden ab und an mit einen Bindestrich getrennt. Wir brauchen die Trennung aber einzeln aufgeschlüsselt mit Komma für eine Auswertung.
Hier ein Beispiel:
Kunde schickt uns die Bezeichner C1-C5
wir brauchen an dieser stelle C1, C2, C3, C4, C5.
Das Klingt ersteinmal trivial, stellt mich aber vor große Probleme.
Bezeichner sind immer wie folgt aufgebaut: Buchstabe + Zahl.
Die Zahl kann hier jedoch auch gerne mal vierstellig werden.
Hier wäre es eventuell sinnvoll den String ansich zu zerlegen in Bindestrich, Buchstabe, Zahl links vom Strich und Zahl rechts vom Strich. Undsich so die neuen Bezeichner zusammenzubasteln.
Vielleicht habt ihr ja eine Idee. Ich würde mich sehr freuen wenn wir eine Lösung finden. LG Hannes

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aus C1-C5 muss C1, C2, C3, C4, C5.
08.09.2016 12:43:11
Marsl
Hmm, vielleicht zu einfach, aber.... Du könntest das eventuell mit einer verschachtelten wenn Funktion machen. Müsstest halt alle Eventualitäten damit abfangen bsp.:
=WENN(F6="C1-C5";"C1, C2, C3, C4, C5"; WENN(F6="C2-C5";"C2, C3, C4, C5";F6))
mit dem else F6 würdest Du Abfangen, dass die Funktion falls der Kunde die Angaben richtig gemacht hat übernimmt er eben die Bezeichner wie geschrieben.
Reicht Dir das schon? :-/
AW: aus C1-C5 muss C1, C2, C3, C4, C5.
08.09.2016 13:09:18
Rudi
Hallo,
für die ausgewählten Zellen:
Sub aaaa()
Dim r As Range, tmp, iNummer As Long
Dim lErste As Long, lZweite As Long
Dim sIndex As String, sAusgabe As String
For Each r In Selection
sAusgabe = ""
tmp = Split(r, "-")
If UBound(tmp) Then
sIndex = Left(Trim(tmp(0)), 1)
lErste = Mid(Trim(tmp(0)), 2) * 1
lZweite = Mid(Trim(tmp(1)), 2)
For iNummer = lErste To lZweite
sAusgabe = sAusgabe & ", " & sIndex & inimmer
Next
sAusgabe = Mid(sAusgabe, 3)
r = sAusgabe
End If
Next
End Sub

Gruß
Rudi
Anzeige
AW: aus C1-C5 muss C1, C2, C3, C4, C5.
08.09.2016 14:11:50
Hannes
Hallo ihr zwei. So einfach ist es wie gesagt nicht zu lösen.
Da die Buichstaben das ganze Alphabet beinhalten können und die Zahklen bis in die virstelligen bereiche gehen. Z.B. P4-P30, R901-R912, usw...
Rudi dein Ansatz isut vielversprechend! Allerdings funkitoniert er nicht wie gewollt.
Man müsste eventeull beim Trennen von Buchstabe und Zahl die länge der Zahl prüfen.
AW: aus C1-C5 muss C1, C2, C3, C4, C5.
08.09.2016 15:30:01
Hannes
https://www.herber.de/forum/archiv/1176to1180/1177805_Zahl_im_String_finden_VBA.html
#
Hier ist eventuell ein Ansatz. Allerding kann ich ihn nicht so ganz auf mein Problem adoptieren.
Erste Zahl suchen bis zum Bidnestrich.
Zweite Zahl suchen nach Bindestrich.
Buchstaben erkennen.
Neue Positionen generieren aus Differenz der zwei erkannten Zahlen.
Anzeige
Mit folgender Fml lassen sich bis zu 4839 Werte …
09.09.2016 03:06:37
Luc:-?
…enthaltende Code-Intervalle wie gewünscht aufschlüsseln, Hannes;
Bedingung, die IntervallAngaben müssen die Form $#~$# oder $#~# haben, wobei $ für einen in der Angabe stets gleichen Buchstaben aus dem Intervall A-Z (groß/klein egal), ~ für ein/e beliebige/s TrennZeichen/Kombination (weder Buchstaben noch Ziffern!) und # für beliebige Anfangs- und EndZahlen (aus ggf unterschiedlich vielen Ziffern) steht. Dabei ist es egal, ob diese im Intervall ab- oder aufsteigen:
{=VJoin(ADRESSE(ZEILE(INDIREKT(MIN(VSplit(MaskOn(A1;"num");;1))&":"&MAX(VSplit(MaskOn(A1;"num");;1))) );
SPALTE(INDIREKT(LINKS(A1)&":"&LINKS(A1)));4);", ")}
Hierbei handelt es sich um eine singulare (1zellige) MatrixFml, die auch UDFs enthält. Diese habe ich bereits wiederholt verlinkt, zuletzt in diesem Beitrag.
Bei durchgehend 4stelligen Zahlen kam ich im Test auf bis zu 4681, bei Werten von 1- bis 4stellig auf die im Betreff angegebene Anzahl von Einzel-Codes.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Mit folgender Fml lassen sich bis zu 4839 Werte …
09.09.2016 14:02:40
Hannes
Das sieht sehr vielversprechend aus Luc:-?, :)
ich würde sagen volltreffer!
$#~$# liegt bei mir vor:
$=ein gleicher Buchstabe
#=eine Zahl (ggf. mehrere Ziffern)
~= hier eine Bindestrich -
Ich versuche deinen Code anzuwenden und gebe nächste Woche nochmal Feedback.
Danke!!
Ergänzender Nachtrag hierzu
10.09.2016 17:45:51
Luc:-?
Hallo, Hannes;
im Grunde kann die MatrixFml unter den genannten Bedingungen noch etwas kürzer ausfallen:
{=VJoin(ADRESSE(ZEILE(INDIREKT(MIN(VSplit(MaskOn(A1;"num");;1))&":"&MAX(VSplit(MaskOn(A1;"num");;1))) );
SPALTE(INDIREKT(LINKS(A1;2)));4);", ")}
Außerdem könnte man auch einen Namen definieren und die Fml in seinen Bezug schreiben. Dabei sollte die Zelle des Ergebnisses ausgewählt sein, in die man danach nur =definierterName schreiben muss. Die MatrixFmlForm ist dann hierbei nicht erforderlich, weil benannte Fmln mit der ganzen Matrix (auch der ZwischenErgebnisse!) arbeiten. Nur bei einigen sehr komplexen Fmln u/o mit mehreren Ergebnissen muss Xl dann auch in der ZellFml per MatrixFml „mitgeteilt“ wdn, dass alle Zwischen­Ergebnisse bei der Berechnung verwendet u/o alle Ergebnisse ausgegeben wdn sollen. Das ist bei nur einem Ergebnis (wie hier) idR nicht erforderlich.
Falls aber auch Intervalle der Form §#~# (§ → 1 beliebiges nicht-numerisches Zeichen, # → beliebige Anzahl [ab 1] von Ziffern, ~ → beliebige Anzahl [ab 1] von nicht-numerischen Zeichen)¹ verarbeitet wdn sollen, schlage ich folgendes System benannter Kon­stanten und Fmln vor:
Benannte Konstanten (für internen Gebrauch):
IvallWechselZnX ="ÄÅÆÐËÏÖ،ܟÞ$ß# " [#=NummerSymbol, danach LeerZeichen]
IvallWechselZn ="AAADEIOOOUYTSSNL"
Benannte Fmln für internen Gebrauch:
IvallWznIndex =WENNFEHLER(FINDEN(LINKS(A1);IvallWechselZnX);WENNFEHLER(-SUCHEN(LINKS(A1);IvallWechselZnX);0))
IvallBasis =WENN(IvallWznIndex;WECHSELN(GROSS(A1);TEIL(IvallWechselZnX;ABS(IvallWznIndex);1);TEIL(IvallWechselZn;ABS(IvallWznIndex);1));A1)
Benannte Fmln für wahlweises Ergebnis:
IvallErgListe =VJoin(ADRESSE(ZEILE(INDIREKT(MIN(VSplit(MaskOn(IvallBasis;"num");;1))&":"&MAX(VSplit(MaskOn(IvallBasis;"num");;1))));SPALTE(INDIREKT(LINKS(IvallBasis;2)));4);", ")
IvallErgListeX =WENN(IvallWznIndex;WECHSELN(IvallErgListe;TEIL(IvallWechselZn;ABS(IvallWznIndex);1);TEIL(IvallWechselZnX;ABS(IvallWznIndex);1));IvallErgListe)
IvallErgListeGk =WENN(ODER(UND(IvallWznIndex=0;CODE(LINKS(IvallBasis))>96);IvallWznIndex IvallErgListeGkX =WENN(ODER(UND(IvallWznIndex=0;CODE(LINKS(IvallBasis))>96);IvallWznIndex Die letzteren 4 Namen können dann je nach Bedarf in(/als) der(/die) ZellFml verwendet wdn, wobei der …
1. nur §=A-Z a-z verarbeiten kann und stets §=A-Z zurückgibt (Groß-/Kleinschreibung ist also egal);
2. zusätzlich alle Zeichen berücksichtigt, die in der (ergänzbaren) TextKonstante IvallWechselZnX aufgeführt wurden, sofern sie einen Partner in der TextKonstanten IvallWechselZn besitzen (gleiche Reihenfolge bei beiden erforderlich!), wobei reguläre Buchstaben, die sowohl GB- als auch KB-Varianten haben, nur als GB aufgeführt wdn müssen;
3. auch zwischen Groß- und Kleinschreibung unterscheidet (KB bleibt also KB);
4. sowohl die Spezifik des 2. als auch die des 3. berücksichtigt.
¹ Hinweis: MaskOn ist es egal, wieviele nicht-numerische Zeichen vor der 1.Zahl, zwischen den beiden Zahlen oder nach der letzten Zahl stehen. Sie wdn eliminiert bzw durch ein einzelnes LeerZeichen ersetzt, sodass nur die beiden Zahlen, die die Intervall­Grenzen bezeichnen, übrig bleiben. Das 1. (zwingend nicht-numerische) Zeichen der ursprüngl IntervallAngabe ist dann für den KennBuchstaben vor allen Codes des Ergebnis-ListenTextes verantwortlich.
SchöWE, Luc :-?
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige