Bestimmte Tabellenspalten kopieren

Bild

Betrifft: Bestimmte Tabellenspalten kopieren
von: Hermann
Geschrieben am: 24.10.2015 20:21:40

Hallo zusammen,
Vielleicht kann mir jemand weiterhelfen.
Ich habe eine Exceltabelle (Tabelle1)
Für die Spalten A bis V habe ich den Namen "Stammdaten" vergeben.
Die ersten drei Spalten mit den spezifischen Daten sind: W,X,Y, ; die 2.spez.: Z,AA,AB ; die 3. usw.
Blatt1 besteht also aus den Spalten A – V(Stammdaten) plus W,X,Y ;
Blatt2: A – V(Stammdaten) plus Z,AA,AB ;
Blatt3: A – V(Stammdaten) plus AC,AD,AE usw.
Wie kann ich mit einem Makro die Stammdaten (A bis V) und die spez.Dat (W, Y, Z) in ein neues Tabellenblatt kopieren?
Das nächste Tabellenblatt soll dann die Daten der Spalten A bis V und im Anschluß die
Spalten Z, AA, AB enthalten. Es sollen soviele Tabellenblätter erstellt werden wie spez. Daten (also immer drei Spalten) vorhanden sind.
Bisher verwende ich in meiner Tabelle1 eine Spaltenfixierung nach der Spalte V. und rücke für jedes kompl. Blatt immer drei Spalten nach links nach. (Ein Blatt besteht immer aus den Spalten A - V und den drei spezifischen Spalten.)
Das ich für jede komplette Blattansicht nicht immer drei Spalten nach links scrollen muß, hätte ich dafür gerne eigene Tabellenblätter. Format und Formeln dürfen mit kopiert werden.
Die Stammdaten kann ich bereits mit folgendem Makro kopieren.
Sub SpaltenKopieren()
Worksheets("Tabelle1").Range("Stammdaten").Copy _
Destination:=Worksheets("Tabelle2").Range("A1")
Es scheitert aber an der Schleife, die immer die drei nächsten Spalten hinzufügt.
Gruß, Hermann

Bild

Betrifft: AW: Bestimmte Tabellenspalten kopieren
von: Christian
Geschrieben am: 25.10.2015 08:15:52
hallo Hermann
zB so
Beachte:
- alle Tabellen außer "Tabelle1" werden zuerst gelöscht
- "Tabelle1" wird bis zu der letzten Spalte durchlaufen, die in Zeile 1 einen Eintrag hat
Gruß
Christian

Option Explicit
Sub VerteilDat()
    Dim wksSrc As Worksheet
    Dim wksDst As Worksheet
    Dim lngLC As Long
    Dim i As Long, k As Long
    
    Application.ScreenUpdating = False
    
    With ThisWorkbook
        Set wksSrc = .Sheets("Tabelle1")
        ' Tabellen löschen
        Application.DisplayAlerts = False
        For Each wksDst In .Sheets
            If wksDst.Name <> wksSrc.Name Then
                wksDst.Delete
            End If
        Next
        Application.DisplayAlerts = True
        
        ' letzter Eintrag in Zeile 1
        lngLC = wksSrc.Cells(1, wksSrc.Columns.Count).End(xlToLeft).Column
        'Daten verteilen
        For i = 23 To lngLC Step 3
            k = k + 1
            Set wksDst = .Sheets.Add(, .Sheets(k))
            wksDst.Name = "Tabelle" & k + 1
            wksSrc.Columns(1).Resize(, 22).Copy wksDst.Cells(1, 1)
            wksSrc.Columns(20 + 3 * k).Resize(, 3).Copy wksDst.Cells(1, 23)
        Next
    End With
    
    Application.ScreenUpdating = True
    Set wksDst = Nothing
    Set wksSrc = Nothing
End Sub


Bild

Betrifft: AW: Bestimmte Tabellenspalten kopieren
von: Hermann
Geschrieben am: 25.10.2015 18:05:47
Hallo Christian,
soeben habe ich Deine Antwort gelesen.
Was soll ich sagen? Ich war so begeistert, mit welcher Perfektion du diesen Code
geschrieben hast. Ich habe den Code vor lauter Freude gleich mehrmals ausprobiert .
Er funktioniert perfekt.
Vielen Dank.
Wenn Du nochmal Zeit hast, hätte ich noch eine Modifikation.
1. Ist es denn möglich, daß die neu erstellten Tabellenblätter den Blattname "Tabelle"
und den Text aus jeweils W2, Z2, AC2 usw. also von den jeweils drei spezifischen Spalten
immer die erste Spalte, Zeile 2.
2. Ist es Dir möglich, mir den Code ein bisschen zu erklären.
Nochmals vielen Dank für Deine perfekte Arbeit.
Gruß, Hermann

Bild

Betrifft: AW: Bestimmte Tabellenspalten kopieren
von: Hermann
Geschrieben am: 25.10.2015 18:05:58
Hallo Christian,
soeben habe ich Deine Antwort gelesen.
Was soll ich sagen? Ich war so begeistert, mit welcher Perfektion du diesen Code
geschrieben hast. Ich habe den Code vor lauter Freude gleich mehrmals ausprobiert .
Er funktioniert perfekt.
Vielen Dank.
Wenn Du nochmal Zeit hast, hätte ich noch eine Modifikation.
1. Ist es denn möglich, daß die neu erstellten Tabellenblätter den Blattname "Tabelle"
und den Text aus jeweils W2, Z2, AC2 usw. also von den jeweils drei spezifischen Spalten
immer die erste Spalte, Zeile 2.
2. Ist es Dir möglich, mir den Code ein bisschen zu erklären.
Nochmals vielen Dank für Deine perfekte Arbeit.
Gruß, Hermann

Bild

Betrifft: AW: Bestimmte Tabellenspalten kopieren
von: Esmo
Geschrieben am: 30.10.2015 19:17:26
Hallo Hermann,
1. Ersetze die Zeile

wksDst.Name = "Tabelle" & k + 1
durch
wksDst.Name = "Tabelle" & wksSrc.cells(2,20+3*k)
2. Der erste For Each wksDst... Next Block löscht wie gesagt alle Tabellen ausser Deinem Quellblatt (wksSrc, was ja das Blatt "Tabelle1" ist.
Dann wird geschaut, was Deine letzte gefüllte Spalte ist (lngLC). Dann wird von der Spalte W bis zum Ende für jede 3. Spalte des Quellblatts ein neues Blatt angelegt (Set wksDst = .Sheets.Add), umbenannt (wksDst.Name=....) und dann die entsprechenden Daten kopiert??

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Bestimmte Tabellenspalten kopieren"