Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
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

Datenhistorie einer Zelle pro Spalte

Datenhistorie einer Zelle pro Spalte
26.05.2020 15:13:57
Sofia
Hallo,
ich habe folgende Herausforderung:
In einer Zelle sind mehrere Daten zum Warenprozess enthalten.
Das Format sieht wiefolgt aus:
Beispiel Zeile2:
04.05.2020,Wareneingang;05.05.2020,Warenerfassung;07.02.2020,Warenprüfung
Beispiel Zeile3:
07.05.2020,Wareneingang;10.02.2020,Warenprüfung;07.02.2020,Warenlagerung
Wie im Beispiel zu sehen ist, ist nicht jeder Prozessschritt pro Produkt (Zeile) zwangsläufig enthalten.
Das Ziel ist es, dass die Informationen aus der Zelle mit der gesamten Historie derart aufbereitet werden, dass es jeweils eine neue Spalte mit der Überschrift Wareneingang, Warenerfassung, Warenprüfung etc. gibt und darunter pro Zeile jeweils nur das Datum aufgelistet ist.
Da nicht jeder Prozessschritt pro Zeile enthalten ist, bin ich leider nachdem ich den Text in Spalten getrennt habe mit XVERWEIS, SUCHEN o.Ä. zu keiner Lösung gekommen. Ich habe allerdings auch nur Basic Kenntnisse...
Ich nutze eine englische Excel Version.
Hat jemand eine Idee wie sich das lösen lässt?
Danke vorab!
Sofia

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ist auch eine VBA-Lösung eine Option?
26.05.2020 15:29:52
Beverly
Hi Sofia,
sind die Überschriften schon alle bekannt, sodass sie vorher in einer Zeile eingetragen vorliegen? Dann könnte man die Aufteilung in die betreffenden Spalten mit einem Makro relativ einfach realisieren.


AW: Ist auch eine VBA-Lösung eine Option?
26.05.2020 15:44:54
Sofia
Hallo Karin,
das klingt vielversprechend :)
Ja, die Überschriften sind alle bekannt. Als Beispiel wäre das Wareneingang.
Für Zeile 2 soll dann der 04.05.2020 ausgegeben werden, für Zeile 3 der 07.05.2020.
Die vollständige Historie ist wie beschrieben immer vollständig in einer Zelle enthalten, aber mit z.T. abweichenden Prozessschritten.
Danke!
Anzeige
AW: Ist auch eine VBA-Lösung eine Option?
26.05.2020 16:38:43
Beverly
Hi Sofia,
angenommen deine Daten stehen in Spalte A ab Zeile 2 und die Überschriften in Zeile 1 ab Spalte B. Dann kannst du es mit diesem Makro versuchen:
Sub Aufteilen()
Dim arrDaten
Dim lngZeile As Long
Dim intZaehler As Integer
Dim rngSpalte As Range
Dim strDatum As String
For lngZeile = 2 To IIf(IsEmpty(Cells(Rows.Count, 1)), _
Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
arrDaten = Split(Cells(lngZeile, 1), ";")
For intZaehler = 0 To UBound(arrDaten)
Set rngSpalte = Rows(1).Find(Split(arrDaten(intZaehler), ",")(1), _
lookat:=xlWhole)
If Not rngSpalte Is Nothing Then
strDatum = Split(arrDaten(intZaehler), ",")(0)
Cells(lngZeile, rngSpalte.Column) = DateValue(strDatum)
End If
Next intZaehler
Next lngZeile
End Sub
Ob das mit dem englischen Datum passt musst du mal testen.


Anzeige
AW: Ist auch eine VBA-Lösung eine Option?
26.05.2020 19:05:59
Sofia
Hi Karin,
top, das hat funktioniert! Vielen Dank!
Für die Datenhistorie in Zeile 2 wurden die Ergebnisse geliefert - für die weiteren Zeilen habe ich allerdings eine Fehlermeldung erhalten. Muss dafür der Bereich noch erweitert werden?
In meinem Fall stehen die Daten in Spalte C ab Zeile 2 und die Überschriften in Zeile 1 ab Spalte D. Wie müsste das Makro entsprechend angepasst werden?
Grüße
AW: Ist auch eine VBA-Lösung eine Option?
26.05.2020 19:38:34
Beverly
Hi Sofia,
wenn alle Daten in Spalte C stehen, dann muss der Code wie folgt angepasst werden:
Sub Aufteilen()
Dim arrDaten
Dim lngZeile As Long
Dim intZaehler As Integer
Dim rngSpalte As Range
Dim strDatum As String
For lngZeile = 2 To IIf(IsEmpty(Cells(Rows.Count, 3)), _
Cells(Rows.Count, 3).End(xlUp).Row, Rows.Count)
arrDaten = Split(Cells(lngZeile, 3), ";")
For intZaehler = 0 To UBound(arrDaten)
Set rngSpalte = Rows(1).Find(Split(arrDaten(intZaehler), ",")(1), _
lookat:=xlWhole)
If Not rngSpalte Is Nothing Then
strDatum = Split(arrDaten(intZaehler), ",")(0)
Cells(lngZeile, rngSpalte.Column) = DateValue(strDatum)
End If
Next intZaehler
Next lngZeile
End Sub

Könnte es auch vorkommen, dass nur 1 Kombination Datum/Waren... in einer Zelle steht?


Anzeige
AW: Ist auch eine VBA-Lösung eine Option?
27.05.2020 08:29:50
Sofia
Hi Karin,
ja, das könnte theoretisch auch vorkommen. Ich habe es gerade einmal getestet. Der Eintrag endet dann trotzdem auf ein Semikolon, sodass das Datum eines einzelnen Prozessschritts ebenfalls exportiert wurde.
Was mir noch nicht ganz klar ist: Das Makro befüllt nur die Daten aus der Zeile 2, also dem ersten Eintrag. Alle weiteren Zeilen werden nicht befüllt.
Wenn ich in Zeile 3 das Makro ausführen möchte erhalte ich den Fehler "Subscript out of range". Weißt du woran das liegen könnte? Gibt es eine Möglichkeit, dass die Befüllung über alle Zeilen hinweg läuft?
Bitte Beispielmappe bereitstellen
27.05.2020 08:40:43
Beverly
Hi Sofia,
ich kann das leider nicht nachvollziehen und wüsste auch nicht, weshalb das so laufen sollte - bei mir läuft alles komplett bis zum Ende durch. Folglich muss dein Tabellenaufbau irgendwie anders sein - lade also bitte (d)eine Beispielmappe hoch.


Anzeige
AW: Bitte Beispielmappe bereitstellen
27.05.2020 11:13:13
Sofia
Hi Karin,
ich habe gerade meinen Fehler gefunden: bei den Beispielen, die ich genannt habe, fehlt als letztes Zeichen jeweils das Semikolon. Die Datenhistorie endet aber immer mit Semikolon. Wenn ich in meiner Excel das Semikolon entferne, läuft das Makro über alle Zeilen hinweg durch.
Kann man das Makro entsprechend anpassen, dass es auch durchläuft, wenn das letzte Zeichen in der Zeile ein Semikolon ist also beispielsweise 04.05.2020,Wareneingang;05.05.2020,Warenerfassung;07.05.2020,Warenprüfung;
in einer Zelle steht?
Danke!
AW: Bitte Beispielmappe bereitstellen
27.05.2020 11:45:11
Beverly
Hi Sofia,
Sub Aufteilen()
Dim arrDaten
Dim lngZeile As Long
Dim intZaehler As Integer
Dim rngSpalte As Range
Dim strDatum As String
For lngZeile = 2 To IIf(IsEmpty(Cells(Rows.Count, 1)), _
Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
If Right(Cells(lngZeile, 1), 1) = ";" Then
arrDaten = Split(Left(Cells(lngZeile, 1), Len(Cells(lngZeile, 1)) - 1), ";")
Else
arrDaten = Split(Cells(lngZeile, 1), ";")
End If
For intZaehler = 0 To UBound(arrDaten)
Set rngSpalte = Rows(1).Find(Split(arrDaten(intZaehler), ",")(1), _
lookat:=xlWhole)
If Not rngSpalte Is Nothing Then
strDatum = Split(arrDaten(intZaehler), ",")(0)
Cells(lngZeile, rngSpalte.Column) = DateValue(strDatum)
End If
Next intZaehler
Next lngZeile
End Sub

Der Code läuft jetzt auch, falls mal das letzte ";" fehlen sollte - berücksichtigt also beide Möglichkeiten.


Anzeige
AW: Bitte Beispielmappe bereitstellen
27.05.2020 13:58:04
Sofia
Hi Karin,
ich habe den Code nochmal entsprechend für Zeile 3 angepasst, allerdings bekomme ich akuell noch nicht das gewünschte Ergebnis:
Wenn kein Semikolon am Ende steht, läuft es weiterhin korrekt durch. Wenn allerdings jede Zeile mit einem Semikolon endet (was meinem Use Case entspricht), wird wiederum nur die erste Zeile befüllt.
Was mir beim Testen aufgefallen ist, dass wenn ein Teil der Zellen mit Semikolon endet und ein anderer Teil nicht, dass das Makro dann für alle Zellen korrekt ausgeführt wird, die mit einem Semikolon enden.
In meinem Use Case werden allerdings immer alle Zellen mit Semikolon enden und den Fall bekomme ich mit dem Code leider noch nicht abgedeckt. Es würde reichen, wenn das Makro nur für Zellen funktioniert, die auf Semikolon enden. Den anderen Fall brauche ich in dem Fall nicht.
Leider habe ich beim Upload meiner Datei einen Fehler erhalten, dass die Datei beschädigt sei. Ich hoffe meine Erklärung ist auch so nachvollziehbar.
VG
Sofia
Anzeige
Bitte Beispielmappe bereitstellen !!
27.05.2020 15:16:34
Beverly
Hi Sophia,
ich verstehe dein "Kauderwelsch" leider nicht: einerseits schreibst du, dass der Code für Daten mit ";" am Ende korrekt funktioniert, nur für Daten ohne ";" am Ende nicht. Andererseits wird aber nur die 1. Zeile befüllt...
Kopiere deine Daten in eine neue Arbeitsmappe und lade diese hoch.


AW: Bitte Beispielmappe bereitstellen !!
27.05.2020 15:52:06
Sofia
Okay ;-) ich konnte die Excel nur ohne Makro hochladen.
https://www.herber.de/bbs/user/137796.xlsx
Die Anpassung für Spalte C hatte ich wiefolgt gemacht:
Sub Aufteilen()
Dim arrDaten
Dim lngZeile As Long
Dim intZaehler As Integer
Dim rngSpalte As Range
Dim strDatum As String
For lngZeile = 2 To IIf(IsEmpty(Cells(Rows.Count, 3)), _
Cells(Rows.Count, 3).End(xlUp).Row, Rows.Count)
If Right(Cells(lngZeile, 3), 1) = ";" Then
arrDaten = Split(Left(Cells(lngZeile, 1), Len(Cells(lngZeile, 1)) - 1), ";")
Else
arrDaten = Split(Cells(lngZeile, 3), ";")
End If
For intZaehler = 0 To UBound(arrDaten)
Set rngSpalte = Rows(1).Find(Split(arrDaten(intZaehler), ",")(1), _
lookat:=xlWhole)
If Not rngSpalte Is Nothing Then
strDatum = Split(arrDaten(intZaehler), ",")(0)
Cells(lngZeile, rngSpalte.Column) = DateValue(strDatum)
End If
Next intZaehler
Next lngZeile
End Sub

Anzeige
Ursache für dein Problem
27.05.2020 16:29:35
Beverly
Hi Sofia,
du hast den Code nur teilweise angepasst, denn in diesem Codeteil
        If Right(Cells(lngZeile, 3), 1) = ";" Then
arrDaten = Split(Left(Cells(lngZeile, 1), Len(Cells(lngZeile, 1)) - 1), ";")
Else
arrDaten = Split(Cells(lngZeile, 3), ";")
End If
greifst du im If-Zweig mit Split(Left(Cells(lngZeile, 1), Len(Cells(lngZeile, 1)) - 1), ";") auf Spalte A (1) zu und im Else-Zweig mit Split(Cells(lngZeile, 3), ";") auf deine gewünschte Spalte C (3) zu.


Anzeige
AW: Ursache für dein Problem
27.05.2020 17:45:17
Sofia
Hi Karin,
super, jetzt hat es funktioniert! Vielen Dank!
Eine letzte Sache ist mir noch aufgefallen - sorry dafür: leider ist hinter dem Semikolon immer ein Leerzeichen (ist mir zunächst nicht aufgefallen, deshalb ist es in dem Beispielfile anders). Das scheint auch ursprünglich die Ursache gewesen zu sein, warum nur die erste Zeile befüllt wurde.
Ich habe versucht das im Code zu berücksichtigen, bin aber nicht auf das gewünschte Ergebnis gekommen.
Hast du dazu auch noch eine Idee?
AW: Ursache für dein Problem
27.05.2020 18:16:58
Beverly
Hi Sofia,
dann so:
    For lngZeile = 2 To IIf(IsEmpty(Cells(Rows.Count, 3)), _
Cells(Rows.Count, 3).End(xlUp).Row, Rows.Count)
arrDaten = Split(Left(Cells(lngZeile, 3), Len(Cells(lngZeile, 3)) - 1), ";")
For intZaehler = 0 To UBound(arrDaten) - 1
Set rngSpalte = Rows(1).Find(Split(arrDaten(intZaehler), ",")(1), _
lookat:=xlWhole)
If Not rngSpalte Is Nothing Then
strDatum = Split(arrDaten(intZaehler), ",")(0)
Cells(lngZeile, rngSpalte.Column) = DateValue(strDatum)
End If
Next intZaehler
Next lngZeile

Da du geschrieben hast, dass IMMER ein ";" + 1 Leerstelle am Ende steht - eventuell ist es auch ein Stuerzeichen welches wie ein Leerzeichen dargestellt wird - habe ich jetzt nichts mehr unterschieden sondenr lasse das Array nur bis zum vorletzten Feld laufen, da im letzten Feld dann nichts steht was auswertbar wäre.


Anzeige
AW: Ursache für dein Problem
28.05.2020 08:22:36
Sofia
Hi Karin,
Ich habe es nochmal durchgetestet, es scheint einen Umbruch zu geben.
Also ";" + Zeilenumbruch
Wie müsste der Code dann angepasst werden?
Vielen Dank für die grandiose Hilfe!
VG
Sofia
AW: Ursache für dein Problem
28.05.2020 08:39:29
Beverly
Hi Sofia,
hast du den Code denn schon mal getestet? Da nach deiner Aussage definitiv am Ende ein ";" + 1 Stelle vorkommt, spielt es keine Rolle, ob es sich um einen Zeilenumbruch, ein Leerzeichen oder irgendein beliebiges anderes Zeichen handelt, da der Code das letzte Feld des Arrays auslässt:
For intZaehler = 0 To UBound(arrDaten) - 1 '- 1
Ich hatte das mit dem Steuerzeichen nur geschrieben, weil häufig eins am Ende steht, wenn Daten aus einem anderen Programm bzw. einem anderen Dateityp importiert wurden - und das sieht dann wie ein Leerzeichen aus, weil Steuerzeichen oft kein optisches Äquivalent haben.


AW: Ursache für dein Problem
29.05.2020 20:17:22
Sofia
Hi Karin,
ich habe jetzt nochmal mit verschiedenen Excel durchgetestet und es funktioniert in allen Fällen.
Vielen, vielen Dank für deine grandiose Hilfe!
VG
Sofia
Gern geschehen - o.w.T.
29.05.2020 20:21:40
Beverly


300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige