kopiert Ich bin mit dem Extrahieren von Daten aus einem Excel-Blatt beauftragt worden, das seltsam/schlecht formatiert ist. Es gibt viel zu viele Daten, um manuell zu kopieren, also versuche ich ein Makro zu verwenden. Ich bin nicht sehr geschickt mit VBA, aber ich weiß ein wenig (wahrscheinlich gerade genug, um etwas zu brechen :)).Excel-Makro, das schlecht formatierte Daten in Tabelle
Ich arbeite gerade an 1 Blatt, aber es gibt mehrere Blätter, alle auf die gleiche Weise formatiert. Hier ist ein Ausschnitt davon, wie die Quelldaten aussehen: Ich habe die Zellen markiert, die ich kopieren muss. Der Rest der Daten ist nicht wichtig und muss nicht extrahiert werden.
Wie Sie sehen können, werden die Quelldaten nicht als traditionelle Zeilen und Spalten formatiert ist, gelinde gesagt.
Ich kopiere diese Daten in eine Tabelle, die ich in einem neuen Blatt eingerichtet habe.
**** Bearbeiten: **** Ich habe meinen Code aktualisiert. Ich erkannte, dass die Daten so formatiert waren, dass zwischen den Zeilen in den Daten, die ich benötige, genau die gleiche Anzahl von Leerzeichen vorhanden war, 14 um genau zu sein. Ich habe jetzt eine Do While-Schleife, die den Zeilenindex jedes Mal um 14 erhöht, um zum nächsten Datensatz zu gelangen.
Dieser Code funktioniert, aber gehe ich den richtigen Weg ??? Ich muss diesen Vorgang für etwa 50 Blatt wiederholen, von denen einige 1000 oder mehr Datensätze haben.
Sub CopyData()
Dim SourceSheet As Worksheet
Dim DestSheet As Worksheet
Dim DestRow As Long
Dim i As Integer
i = 0
Set SourceSheet = Sheets("Sheet1")
Set DestSheet = Sheets("Data")
Do While i < 100
DestRow = DestSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
SourceSheet.Cells(2 + i, 1).Copy
DestSheet.Range("A" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(2 + i, 2).Copy
DestSheet.Range("D" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(3 + i, 2).Copy
DestSheet.Range("E" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(4 + i, 2).Copy
DestSheet.Range("F" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(2 + i, 7).Copy
DestSheet.Range("C" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(5 + i, 7).Copy
DestSheet.Range("G" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(14 + i, 2).Copy
DestSheet.Range("B" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
i = i + 14
Loop
End Sub
Ich würde dies als die Antwort markieren. Was die Fehlerprüfung für eine einmalige, die Sie selbst laufen, würde ich nicht stören. Für einen Anfänger hast du ein gutes Gefühl dafür, also hoffentlich wirst du VBA für etwas dauerhafteres verwenden können. Das heißt, die Genugtuung, so etwas zu schreiben, das die Arbeitszeit auf Knopfdruck reduziert, ist großartig. –
Danke Ich habe meine Frage nie beantwortet, daher war ich mir nicht sicher, wie das genau funktioniert hat. Ich werde als Antwort markieren, sobald es mich lassen wird. Probleme und Lösungen wie diese sind genau das, was ich am Programmieren liebe. –