Hallo zusammen, ich habe ein größeres Problem, bei dem ich mir garnicht vorstellen kann ob es überhaupt lösbar ist. Ich habe eine Access Datenbank, in der im Feld Auftrag mehere Aufträge eingegeben werden (per Scanner) Diese Datenbank wird nach Excel exportiert. Jetzt ist das Feld mit den Auftragsnummern mein Problem. Im Feld Auftrag kann ich die Auftragsnummern zwar untereinander darstellen, (siehe Anhang) aber ich hätte entweder gern ein Trennzeichen zwischen jeder Auftragsnummer oder am besten wäre pro Auftragsnummer eine zusätzliche Zeile. Ist das irgendwie möglich ? Danke schon mal Viele Grüße Andrea
Hallo Fenneck, danke für die schnell Antwort. Genial, das geht. aber ist es noch möglich die Daten, die in den anderen spalten stehen immer mit zu kopieren ? (also dann duplizieren sooft wie Auftragsnummern vorhanden sind) Ich möchte ja wissen zu welcher Zeile meine Aufträge passen.
ja, das geht. Meine Frage nach den Arbeitsabläufen war, ob der Code eine Datei wie gezeigt NACHTRÄGLICH bearbeiten soll, oder immer sofort nach der Eingabe EINER neuen Zeile.
Hallo Fennek, die Excel Tabelle wird immer im kompletten bearbeitet. Sie wird aus der Access Datenbank exportiert. es wäre auch ok, wenn die originaltabelle stehen bleibt und die angepasse auf einem neuen Tabellenblatt erstellt wird. So wie es halt möglich ist. In die Excel Tabelle wird nichts eingetragen. Das kommt aus Access. Die Auswertung brauche ich jeden Monat einmal.
der folgende Code muss in das Workbook eingefügt werden:
Code:
'in der Datei aus Access: 'Alt-F11: öffnet den VBA-Editor 'Alt-E-M (nacheinander): Neues Allgemeines Modul 'mit Copy/Paste den Code einfügen 'mit F5 oder dem Play-Button starten
Sub F_en() If Sheets.Count = 1 Then Sheets.Add , Sheets(1) Sheets(1).UsedRange.Rows(1).Copy Sheets(2).Range("A1") End If With Sheets(1).UsedRange For i = 2 To .Cells(Rows.Count, 4).End(xlUp).Row An = Len(.Cells(i, 4)) - Len(Replace(.Cells(i, 4), Chr(10), "")) .Rows(i).Copy Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(An + 1) If An > 0 Then Ar = Split(.Cells(i, 4), Chr(10)) With Sheets(2) lr = .Cells(Rows.Count, 4).End(xlUp).Row For k = UBound(Ar) To 0 Step -1 .Cells(lr, 4).Offset(-k) = Ar(UBound(Ar) - k) Next k End With End If Next i End With Sheets(2).UsedRange.Columns.AutoFit End Sub
per VBA wird hier für jeden Auftrag eine Zeile erzeugt:
Sub BereinigeDB() Dim lngAnzahl As Long Dim rngA As Range Dim varAuftraege As Variant With Range("A1").CurrentRegion.Columns(4) If .Cells.Count > 1 Then Application.ScreenUpdating = False .Resize(.Cells.Count - 1).Offset(1).NumberFormat = "@" For Each rngA In .Cells varAuftraege = Split(rngA.Value, vbLf) For lngAnzahl = 1 To UBound(varAuftraege) If lngAnzahl = 1 Then rngA.Value = CStr(varAuftraege(UBound(varAuftraege))) End If rngA.EntireRow.Copy rngA.EntireRow.Insert rngA.Offset(-1).Value = CStr(varAuftraege(lngAnzahl - 1)) Next lngAnzahl Next rngA Application.CutCopyMode = False Application.ScreenUpdating = True End If End With End Sub