Excel VBA Makros: Spalte mit bestimmter Überschrift in anderes Tabellenblatt kopieren?


15.10.2020, 12:53

Ich sehe gerade in der Beschreibung wird von den Überschriften "A" und "L" geredet. Ich meine natürlich "Auftrag" und "Kundennummer"

3 Antworten

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 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
Kompass12345 
Fragesteller
 15.10.2020, 15:15

Vielen Dank!

1

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
Woher ich das weiß:Berufserfahrung
Hannes62a  15.10.2020, 14:05

Damit kopierst Du aber nur Werte. Formeln werden nicht übertragen. Bin mir nicht sicher, ob das so gewollt ist.

2
geri3d  15.10.2020, 14:06
@Hannes62a

Das mit der Formel wäre kein Problem ausser dass der Bezug fehlt, ich denke es ist eher eine Tabelle zum Ausdrucken.

1
Kompass12345 
Fragesteller
 15.10.2020, 15:16

Vielen Dank euch beiden!

1