Excel VBA Makros: Spalte mit bestimmter Überschrift in anderes Tabellenblatt kopieren?
Hallo zusammen,
ich stehe im Moment auf dem Schlauch.... Leider bin ich kein Profi in VBA.
Mein Problem ist folgendes: Ich möchte bestimmte Spalten aus einem Tabellenblatt in ein anderes kopieren. Da die Reiehnfolge der Spalten nicht immer gleich ist, ermittle ich die zu kopierenden Spalten anhand der Überschrift in der ersten Zeile. Soweit so gut...
Nun scheitere ich leider an der Umsetzung. Bis zum kopieren funktioniert es. Doch klappt das einfügen in das neue Tabellenblatt nicht...
Es tritt folgender Fehler auf:
"Laufzeitfehler 1004
Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden"
Ich hoffe ihr könnt mir weiterhelfen
Viele Grüße
Ich sehe gerade in der Beschreibung wird von den Überschriften "A" und "L" geredet. Ich meine natürlich "Auftrag" und "Kundennummer"
3 Antworten
So kannst Du eine komplette Spalte kopieren und in eine andere Tabelle einfügen, wobei deren Inhalte nach rechts verschoben werden. Musst Du nur noch ein bisschen anpassen, dann sollte es funktionieren.
Columns(2).Copy
Sheets("Blatt 2").Activate
Range("F1").Select
Selection.Insert Shift:=xlToRight
Sheets("Tabelle1").Activate
Application.CutCopyMode = False
Es gibt ja bereits eine Lösung.
Hier möchte ich nur noch auf mögliche Dinge hinweisen, die ggf zu unerwünschten Ergebnissen führen.
"USED.RANGE.COUNT" gibt nur die Anzahl zurück, wo auch tatsächlich Zellen verwendet sind.
Annahme: Spalte A hat keine Daten und auch sonst keine Zellen vom Standard abweichend formatiert.
In Zelle B1 steht "etwas".
Dann gibt USEDRANGE.COLOUMS.COUNT 'nur' 1 zurück.
Analog gilt dies für Zeilen.
Bei Tabellen die keine Lücken in der Verwendung (Zeile und Spalte) haben fällt so etwas erst mal nicht auf. "Leider" gibt es aber auch Tabellen mit Lücken.
==
Das "Kopieren" sollte wenn möglich nicht mit Copy Paste gemacht werden, da dies zu lange dauert.
Wenn man die Bereiche kennt und dies auch immer gleich groß sind kann man einfach zuweisen.
Worksheets("Tabelle2").Range("A1:C5").Value = _
Worksheets("Tabelle1").Range("A1:C5").Value
Sind Quelle und Zielbereiche identisch formatiert werden sie auch visuell gleich dargestellt.
Wenn man einen Bereich ermittelt dann wir mit Cells der Bereich aufgespannt:
Hier analog zu der Koordinaten Darstellung oben:
Worksheets("Tabelle2").Range(Worksheets("Tabelle2").Cells(1,1),Worksheets("Tabelle2").Cells(5,3)).Value = _
Worksheets("Tabelle1").Range(Worksheets("Tabelle1").Cells(1,1),Worksheets("Tabelle1").Cells(5,3)).Value
So gehts:
Sub CopyTabelle()
For i = 1 To Tabelle1.Cells(1, Columns.Count).End(xlToLeft).Column
If Tabelle1.Cells(1, i).Value = "Kundennummer" Then
For j = 1 To Tabelle1.Cells(Rows.Count, i).End(xlUp).Row
Tabelle2.Cells(j, i).Value = Tabelle1.Cells(j, i).Value
Next
End If
If Tabelle1.Cells(1, i).Value = "Auftrag" Then
For j = 1 To Tabelle1.Cells(Rows.Count, i).End(xlUp).Row
Tabelle2.Cells(j, i).Value = Tabelle1.Cells(j, i).Value
Next
End If
Next
End Sub
Das mit der Formel wäre kein Problem ausser dass der Bezug fehlt, ich denke es ist eher eine Tabelle zum Ausdrucken.
Damit kopierst Du aber nur Werte. Formeln werden nicht übertragen. Bin mir nicht sicher, ob das so gewollt ist.