Registriert seit: 22.01.2015
Version(en): 2007
22.01.2015, 22:04
(Dieser Beitrag wurde zuletzt bearbeitet: 22.01.2015, 22:06 von Frankie.)
Hallo, bräuchte etwas hilfe, habe zwei Spalten in einer (Spalte A) stehen viele Zahlen getrennt durch unterschiedliche Zeichen in der anderen (Spalte B) nur eine Zahl. Ich suche nun eine möglichst einfache Möglichkeit jede einzelne Zahl aus A jeweils mit der Zahl aus B zu verknüpfen und in zwei Spalten untereinander darzustellen. Am besten den screenshot begutachten, links ist der Ist-Zustand, rechts der Soll-Zustand. Danke! [url= Dateiupload bitte im Forum! So geht es: Klick mich!]
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Frankie,
das sind zu wenige Infos.
Was bedeutet unterschiedliche Zeichen? Kann man sie eingrenzen? Sind es nur die, die man im Screenshot sieht? Ist der Doppelpunkt immer vorhanden? Beginnen die Zahlen dann immer nach dem Doppelpunkt?
Wieviele Datensätze können es sein?
Kannst Du VBA einsetzen?
Gruß Atilla
Registriert seit: 22.01.2015
Version(en): 2007
Hallo,
es sieht immer so aus wie auf dem screenshot, erst der : und dann die zahlen mit - und , getrennt. Das einzige was sich ändert sind die Buchstaben und die Anzahl der Stellen der Zahlen. Maximal 1500 unterschiedliche Zahlen pro Excel Datei, verteilt über unterschiedlich viele Zeilen.
Ich hatte mal einen VBA Kurs, aber wie ich festgestellt habe, ging das meiste was ich gelernt habe ins Nirvana, da ich nie wieder VBA benutzt habe nach dem Kurs.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Frankie, dann teste mal folgenden Code: Code: Option Explicit
Sub zusammenführen() Dim i As Long, j As Long, zZ As Long Dim lngZ As Long Dim arr Application.ScreenUpdating = False Columns("D:E").ClearContents 'Inhalte der Spalten D:E löschen zur Aufnahme der neuen Werte lngZ = Cells(Rows.Count, 1).End(xlUp).Row zZ = 2 ' ab Zeile 2 werden Werte reingeschrieben For i = 2 To lngZ arr = Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-") If UBound(arr) Then For j = LBound(arr) To UBound(arr) Cells(zZ, 4) = arr(j) Cells(zZ, 5) = Cells(i, 2) zZ = zZ + 1 Next j End If Next i Application.ScreenUpdating = True End Sub
Der Code ist sehr einfach und nicht unbedingt die schnellste Variante. Wenn die Performance nicht stimmen sollte, dann melde Dich noch ein mal.
Gruß Atilla
Registriert seit: 22.01.2015
Version(en): 2007
24.01.2015, 20:43
(Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2015, 20:50 von Frankie.)
Hallo Atilla,
danke für den Einsatz. Der Code funktioniert soweit, bis auf ein Problem, bei der letzt Zahl wird auch das ) mit übertragen.
Habe jetzt eine Stunde lang auf den Code gestarrt um ihn nachvollziehen zu können, denke bis auf die Sortierung die hinter der arr variable liegt habe ich alles begriffen. Könntest vielleicht erklären was genau in dieser Zeile passiert und wie ich das ) weg bekomme: Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-")
Und noch etwas, oben wird ja der Bereich in dem das script laufen mit bis zur letzten beschriebenen Zeile definiert. Das gibt auch Probleme, weil in der Tabelle auch zwischendrinnen leere Zeilen sein können und dann klappt es nicht mehr, wie könnte mand as noch lösen?
Registriert seit: 14.04.2014
Version(en): 2003, 2007
24.01.2015, 22:35
(Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2015, 22:45 von atilla.)
Hallo Frankie, dann teste folgenden Code: Code: Sub zusammenführen() Dim i As Long, j As Long, zZ As Long Dim lngZ As Long Dim arr Application.ScreenUpdating = False Columns("D:E").ClearContents 'Inhalte der Spalten D:E löschen zur Aufnahme der neuen Werte lngZ = Cells(Rows.Count, 1).End(xlUp).Row zZ = 2 ' ab Zeile 2 werden Werte reingeschrieben For i = 2 To lngZ If Cells(i, 1) <> "" Then arr = Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-") If UBound(arr) Then For j = LBound(arr) To UBound(arr) Cells(zZ, 4) = Replace(arr(j), ")", "") Cells(zZ, 5) = Cells(i, 2) zZ = zZ + 1 Next j End If End If Next i Application.ScreenUpdating = True End Sub
Zitat:Könntest vielleicht erklären was genau in dieser Zeile passiert und wie ich das ) weg bekomme: Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-") Der Ausdruck wird von der innersten Klammer nach außen abgearbeitet. Split trennt Inhalte nach vorgegebenen Zeichen. Zuerst wird der Zellinhalt nach Doppelpunkt mit folgendem Leerzeichen getrennt. Es entsteht ein Array mit zwei werten. Auf Dein eingestelltes Beispiel bezogen ist es einmal "(Pl1: " und einmal "T13202-T13202,T13201-T13202)" Das macht dieser Ausdruck: Split(Cells(i, 1), ": ")Arrays sind Null basiert, das heißt das erste Element ist das "Nullte" und das zweite ist das "Erste" Dass ich die Zahlen im zweiten Element brauche sage ich, indem ich hinter dem Ausdruck in Klammern eine 1 schreibe: Split(Cells(i, 1), ": ")(1)Da die Zahlen mit unterschiedlichen Zeichen getrennt sind, vereinheitliche sie, indem ich Kommata mit Bindestrich ersetze: Replace(Split(Cells(i, 1), ": ")(1), ",", "-")Nun Splitte ich sie ein letztes mal nach Bindestrich: Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-")Somit habe ich ein Array mit 4 Elementen, die ich in einer Schleife abarbeite. Die Klammer hatte ich übersehen. Die kann man dann noch einmal mit Replace beim durchlaufen der Elemenete des Array einfach mit "nichts" ersetzen: Replace(arr(j), ")", "")Damit Leerzellen nicht betrachtet werden, habe ich um das Ganze noch eine IF Abfrage gebaut, die schaut ob die Zelle nicht leer ist. In der Onlinehilfe findest Du auch Erklärungen zur Split und Replace Funktion. Wenn Du im Code den Cursor innerhalb eines der Begriffe setzt und die Funktionstaste F1 betätigst, gelangst Du direkt zu den betreffenden Seiten.
Gruß Atilla
|