Microsoft Excel

Herbers Excel/VBA-Archiv

letzte Spalte irritiert


Betrifft: letzte Spalte irritiert von: Nadja
Geschrieben am: 01.10.2019 11:48:20

Hallo Zusammen,
ich hab ein Problem und benötige (dringend) Hilfe. Ich würde mich freuen, wenn mir jemand helfen könnte.
Ich habe mehrere Tabellen.
Per Makro kopiere ich immer bestimmte Zellen aus jeder Tabelle und füge sie in die letzte Tabelle "BSP" ab Spalte B nebeneinander ein
Ich habe hier im Forum ein Makro gefunden und für mich „optimiert“

Sub Einfügen ()
 Dim x&
             For x = 1 To Worksheets.Count
             With Worksheets(x)
                 .Range("B2:B24").Copy Destination:=Sheets("BSP").Cells(2, x + 1)
             End With
             Next
             
             Dim y&
             For y = 1 To Worksheets.Count
             With Worksheets(y)
                 .Range("C2:C24").Copy Destination:=Sheets("BSP ").Cells(27, y + 1)
             End With
             Next
             
             Dim z&
             For z = 1 To Worksheets.Count
             With Worksheets(z)
                 .Range("D2:D24").Copy Destination:=Sheets("BSP ").Cells(52, z + 1)
             End With
             Next
End Sub

Das funktioniert alles, jedoch macht mir die letzte Spalte Probleme. Ich weiß nicht woher die Werte kommen. Die Werte der vorletzten Spalte sind immer die Werte aus der letzten Tabelle.
Ich hatte die Idee per Makro immer die letzte Spalte mit Inhalt zu löschen.

Habe hier auch ein Code dafür gefunden:

Sub letzte_Spalte()
 Columns(ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column).Delete
 End Sub

Damit wird aber immer die vorletzte Spalte gelöscht (die Spalte mit den Werten der letzten Tabelle und nicht die Spalte wo ich nicht weiß woher die Werte kommen)

Ich hoffe ich habe mein Problem ausführlich erklärt und mir kann jemand helfen.
Beispielmappe ist diesmal auch dabei 
Danke im Voraus

https://www.herber.de/bbs/user/132307.xlsx

Viele Grüße,
Nadja

  

Betrifft: AW: letzte Spalte irritiert von: UweD
Geschrieben am: 01.10.2019 12:04:23

Hallo


Das letzte Blatt "BSP" wird ja auch durchlaufen und kopiert.

Ausserdem reicht eine Schleife als Durchlauf.

so???

Sub Einfügen()
    Dim x&, ZTB As Worksheet
        Set ZTB = Sheets("BSP")
        
        For x = 1 To Worksheets.Count
           With Worksheets(x)
               If .Name <> ZTB.Name Then
                   .Range("B2:B24").Copy Destination:=ZTB.Cells(2, x + 1)
                   .Range("C2:C24").Copy Destination:=ZTB.Cells(27, x + 1)
                   .Range("D2:D24").Copy Destination:=ZTB.Cells(52, x + 1)
               End If
           End With
        Next
End Sub


LG UweD


  

Betrifft: AW: letzte Spalte irritiert von: Daniel
Geschrieben am: 01.10.2019 12:04:41

Hi
wenn du die letzte benutze Spalte löschen willst, nimm einfach

ActiveSheet.Cells.SpecialCells(xlcelltypelastcell).EntireColumn.Delete
allerdigs werden bei der Ermittlung des benutzen Zellbereichs nicht nur Zellinhalte (Festwerte, Formeln) berücksichtigt, sondern auch Formatierungen.

wenn du die letzte benutzte Spalte mit Inhalt löschen willst, ermittelst du diese am besten so, verwende eine Zeile, die auf jeden Fall Daten enthält (z.B. die Überschriftenzeile)
Cells(2, Columns.Count).end(xltoleft).Entirecolumn.Delete
Gruß Daniel


  

Betrifft: AW: letzte Spalte irritiert von: peterk
Geschrieben am: 01.10.2019 12:05:24

Hallo

Da Du alle Worksheets durchläufst kopiert er am Schluss die Splate B aus "BSP" in die letzte Spalte in "BSP". Du musst ein zusätzliche Abfrage einbauen. z.b.

For x = 1 To Worksheets.Count
   With Worksheets(x)
      if .name <> "BSP" then 
         .Range("B2:B24").Copy Destination:=Sheets("BSP").Cells(2, x + 1)
      end if
   End With
Next




  

Betrifft: oder einfach, wenn BSP immer am ende von: Daniel
Geschrieben am: 01.10.2019 12:48:52

steht, die Schleife nur bis zum vorletzten Blatt laufen lassen:

For x = 1 To Worksheets.Count - 1
bzw, wenn BSP am Anfang steht, die Schleife erst bei 2 beginnen lassen:

 For x = 2 To Worksheets.Count
nur wenn die Postition von BSP nicht klar ist und das Blatt auch mal in der Mitte stehen kann, braucht man die Prüfung.
Um dann die Lücke in der Zusammenstellung zu vermeiden, muss man die Spaltennummer als seperaten Zähler mitführen.
For x = 1 to Worksheet.Count
    if Worksheets(x).Name <> "BSP" then
        y = y + 1
       Worksheets(x).Range("B2:B24").Copy Destination:=Sheets("BSP").Cells(2, y + 1)
    end if
next
Gruß Daniel


  

Betrifft: AW: oder einfach, wenn BSP immer am ende von: Nadja
Geschrieben am: 02.10.2019 10:21:35

Vielen vielen Dank für eure Hilfe! funktioniert jetzt einwandfrei + hab durch die Erklärungen wieder dazu gelernt. Merci :)


Beiträge aus dem Excel-Forum zum Thema "letzte Spalte irritiert "