Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro zum teilen einer Tabelle

Forumthread: Makro zum teilen einer Tabelle

Makro zum teilen einer Tabelle
04.11.2008 18:33:00
Josefiene
Hey liebe Excel-Kenner,
Mein Anliegen bezieht sich auf einen Datensatz den ich jeden Morgen bekomme.
Er hat maximal 2000 Zeilen, die Spalten A-L und in der ersten Zeile Überschriften für die jeweiligen Spalten.
Dieser Datensatz sollte nach Möglichkeit mit Hilfe eines VBA Codes in mehrere Tabellen (zu je 40 Zeilen) geteilt und auch seperat gespeichert werden (Beispiel: Ausgangsdatensatz 800 Zeilen - 20 resultierende Tabellen (Seite 1 - 20). Das Ganze am besten mit den jeweiligen Überschriften in jeder Tabelle. (Bespiel resultierende Tabelle 1 - Einträge 1-40 - Seite 1 usw.)
Desweiteren bräuchte ich einen anderen VBA Code der sich damit befasst in Zeile E Beträge die größer als 2000.00 sind zu filtern und die ganze Spalte in eine extra Tabelle zu kopieren. Auch hier vorzugsweise mit Überschriften. Auch diese Tabelle soll nach Möglichkeit wieder automatisch gespeichert werden (Name beispielsweise: große Beträge)
Ich bin für jede Hilfe dankbar.
Liebe Grüße
Josie
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zum teilen einer Tabelle
04.11.2008 19:48:41
Tino
Hallo,
hier mal eine Lösung für Dein erstes Problem.
Sub Test()
Dim Überschrift As Range
Dim Bereich As Range
Dim nTab As Worksheet
Dim A As Long
Application.ScreenUpdating = False
With Tabelle1
    Set Überschrift = .Rows(1)
    Set Bereich = .Range("2:41")
    
    For A = 2 To .UsedRange.Rows.Count Step 40
     Set nTab = Worksheets.Add(, Worksheets(Sheets.Count))
     Überschrift.Copy nTab.Range("A1")
     Bereich.Copy nTab.Range("A2")
     Set Bereich = Bereich.Offset(40, 0)
    Next A

End With
Application.ScreenUpdating = True
End Sub


Gruß Tino

Anzeige
AW: Makro zum teilen einer Tabelle
05.11.2008 11:28:00
Josefiene
Lieber Tino,
vielen Dank für deine Hilfe. Ich wollte das ganze gleich mal ausprobieren und habe es leider nicht hinbekommen. Ich bekomme die Fehlermeldung "Object required".
Denke das Problem liegt hier:
With Tabelle1
Hier müsste Tabelle1 wohl von mir ersetzt werden. Ich weiß allerdings nicht womit und habe auch schon etwas herumprobiert aber keine Lösung gefunden. Kannst du mir da eventuell noch einmal kurz helfen?
Liebe Grüße
Josie
Anzeige
AW: Makro zum teilen einer Tabelle
05.11.2008 16:04:00
Tino
Hallo,
verwende den Objektnamen (siehe Grafik) der Tabelle oder schreibe Sheets("Tabelle1"),
wobei "Tabelle1" der Name der Tabelle ist (siehe Grafik in Klammern oder im Excel Tabellenregister).
Userbild
Gruß Tino
Anzeige
AW: Makro zum teilen einer Tabelle
05.11.2008 17:19:15
Josefiene
Alles klar, habe es hinbekommen. Problem war das mein Excel auf Englisch gestellt ist und ich somit Sheet1 eingeben musste. Läuft nun perfekt.
Hast du eventuell noch eine Idee wie ich die erstellten Sheets (Tabellen) einzeln speichern kann, da diese aufgeteilt werden müssen?
Allerliebsten Dank und liebe Grüße !
Josie
Anzeige
AW: Makro zum teilen einer Tabelle
05.11.2008 18:38:00
Tino
Hallo,
ok. wie wäre es hiermit?
Die Dateien werden im Ordner der der Datei erstellt.
Modul Modul1
Option Explicit 
 
Sub Test() 
Dim Überschrift As Range 
Dim Bereich As Range 
Dim nTab As Worksheet 
Dim A As Long, i As Integer 
Dim NeuMappe As Workbook 
Dim Pfad As String 
 
With Application 
 .StatusBar = "Dateien werden erstellt, bitte warten...!" 
 .ScreenUpdating = False 
 .DisplayAlerts = False 
Pfad = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\") 
With Tabelle1 
    Set Überschrift = .Rows(1) 
    Set Bereich = .Range("2:41") 
     
    For A = 2 To .UsedRange.Rows.Count Step 40 
     Set nTab = Worksheets.Add(, Worksheets(Sheets.Count)) 
      Überschrift.Copy nTab.Range("A1") 
      Bereich.Copy nTab.Range("A2") 
         
            nTab.Copy 
            Set NeuMappe = ActiveWorkbook 
            i = i + 1 
            NeuMappe.SaveAs Pfad & "Datei_" & i 
            NeuMappe.Close False 
            nTab.Delete 
      
     Set Bereich = Bereich.Offset(40, 0) 
    Next A 
 
End With 
 .DisplayAlerts = True 
 .ScreenUpdating = True 
 .StatusBar = False 
End With 
End Sub 


Gruß Tino

Anzeige
AW: Makro zum teilen einer Tabelle
05.11.2008 19:03:00
Josefiene
Ich mache immer irgendwas falsch glaube ich. :-(
Ich habe die Ausgangsdatei im Moment auf dem Desktop gespeichert. Aber nach durchlaufen des Makros sind keine neuen Datein auf dem Desktop. Wäre es nicht möglich die einzelnen Tabellen, die ich mit deinem ersten Makro erstellt habe seperat zu speichern?
Oder muss ich bei dem zweiten Makro noch irgendetwas eintragen, was ich vergessen haben könnte?
Eine Fehlermeldung bekomme ich jedenfalls nicht.
Bitte entschuldige das ich so viel deiner Zeit in Anspruch nehme.
Liebe Grüße
Anzeige
AW: Makro zum teilen einer Tabelle
05.11.2008 19:14:00
Tino
Hallo,
gehe mal bei Dir mit der F8 Taste schrittweise vor und schau mal was er macht.
Fahre auch mal mit der Maus über die Variable Pfad und schau mal ob alles passt.
PS: ich habe xl2003 und es funktioniert bei mir.
Gruß Tino
AW: Makro zum teilen einer Tabelle
05.11.2008 19:19:07
Josefiene
Hmm, ich seh das er neue Sheets erstellt und schließt und er scheint sie auch zu speichern. Ich finde sie nur leider nicht. Wäre es möglich einen Pfad vorzugeben?
Komme mir gerade so doof vor.
Vielen Dank für deine Geduld.
Liebe Grüße
Anzeige
AW: Makro zum teilen einer Tabelle
05.11.2008 19:35:00
Tino
Hallo,
tausche die Zeile

Pfad = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\")


Mit dieser aus


Pfad = "C:\"


PS: schau mal über den Explorer in den Desktop, die Dateien müssen dort sein!
Gruß Tino

Anzeige
AW: Makro zum teilen einer Tabelle
06.11.2008 14:19:00
Josefiene
Habe die anderen Dateien nun auch gefunden. Wurden im Ordner der Personal Makros gespeichert.
Habe nun aber den Pfad selber festgelegt und bin fast rundum zufrieden.
Das einzige was das ganze nun perfekt machen würde wäre, wenn ich in dem Namen der neuen Dateien den Namen der Ursprungsdatei (immer nach Erstellungsdatum benannt) mit einfügen könnte.
Beispiel:
Ursprungsdatei heißt 09.10.2008
resultierenden Dateien sollten dann 09.10.2008_Seite1 usw heißen.
Solltest du hierfür eine schnelle Lösung habenwäre es toll, ansonsten bin ich so aber auch total zufrieden.
Ein riesengroßes Dankeschön für deine Geduld und die tolle Hilfe.
Liebe Grüße
Fiene
Anzeige
AW: Makro zum teilen einer Tabelle
06.11.2008 20:23:11
Tino
Hallo,
teste mal ob es nach deinen Vorstellungen funktioniert.
Option Explicit

Sub Test()
'Deklarierung 
Dim Überschrift As Range
Dim Bereich As Range
Dim nTab As Worksheet
Dim A As Long, i As Integer
Dim NeuMappe As Workbook
Dim Pfad As String, strDateiName As String

 
With Application
 .StatusBar = "Dateien werden erstellt, bitte warten...!"
 .ScreenUpdating = False
 .DisplayAlerts = False
Pfad = "C:\" 'Speicherpfad 
'aktueller Dateiname ohne Extension 
strDateiName = Left$(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1)
With Tabelle1 'Tabelle mit Daten 
    Set Überschrift = .Rows(1) 'ist Überschrift 
    Set Bereich = .Range("2:41") 'erster Bereich 40 Zeilen 
    
    'Schleife bis letzte Zeile in 40er Schritten 
    For A = 2 To .UsedRange.Rows.Count Step 40
     'neue Tabelle erstellen 
     Set nTab = Worksheets.Add(, Worksheets(Sheets.Count))
      'Überschrift in Tabelle kopieren 
      Überschrift.Copy nTab.Range("A1")
      'Werte in Tabelle übertragen 
      Bereich.Copy nTab.Range("A2")
         'Tabelle in neue Mappe 
            nTab.Copy
         'neue Datei in Variable 
            Set NeuMappe = ActiveWorkbook
         'Zähler für Seitenindex 
            i = i + 1
         'Datei Speichern unter 
            NeuMappe.SaveAs Pfad & strDateiName & "_Seite" & i
         'neue Datei schließen 
            NeuMappe.Close False
         'Tabelle wieder löschen 
            nTab.Delete
         'nächte 40 Zeilen festlegen 
     Set Bereich = Bereich.Offset(40, 0)
    Next A
 
End With
 .DisplayAlerts = True
 .ScreenUpdating = True
 .StatusBar = False
End With
End Sub


Gruß Tino

www.VBA-Excel.de


Anzeige
AW: Makro zum teilen einer Tabelle
07.11.2008 11:05:00
Veronika
Perfekt ! Vielen, vielen Dank für deine tolle Hilfe !
Hoffe es hat Dich nicht allzu viel Zeit gekostet.
Liebe Grüße und ein schönes Wochenende
Veronika
;
Anzeige
Anzeige

Infobox / Tutorial

Makro zum Teilen einer Excel-Tabelle


Schritt-für-Schritt-Anleitung

Um eine Excel-Tabelle zu teilen, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke im Menü auf Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub Test()
       Dim Überschrift As Range
       Dim Bereich As Range
       Dim nTab As Worksheet
       Dim A As Long, i As Integer
       Dim NeuMappe As Workbook
       Dim Pfad As String
       Dim strDateiName As String
    
       With Application
           .StatusBar = "Dateien werden erstellt, bitte warten...!"
           .ScreenUpdating = False
           .DisplayAlerts = False
       End With
    
       Pfad = "C:\" ' Speicherpfad
       strDateiName = Left$(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".") - 1)
    
       With Tabelle1 ' Tabelle mit Daten
           Set Überschrift = .Rows(1) ' ist Überschrift
           Set Bereich = .Range("2:41") ' erster Bereich 40 Zeilen
    
           For A = 2 To .UsedRange.Rows.Count Step 40
               Set nTab = Worksheets.Add(, Worksheets(Sheets.Count))
               Überschrift.Copy nTab.Range("A1")
               Bereich.Copy nTab.Range("A2")
    
               nTab.Copy
               Set NeuMappe = ActiveWorkbook
               i = i + 1
               NeuMappe.SaveAs Pfad & strDateiName & "_Seite" & i
               NeuMappe.Close False
               nTab.Delete
    
               Set Bereich = Bereich.Offset(40, 0)
           Next A
       End With
    
       With Application
           .DisplayAlerts = True
           .ScreenUpdating = True
           .StatusBar = False
       End With
    End Sub
  4. Passe den Pfad an: Ändere die Zeile Pfad = "C:\" zu dem gewünschten Speicherort.

  5. Führe das Makro aus: Drücke F5, um das Makro auszuführen.

Dieses Makro teilt eine Excel-Tabelle in mehrere Tabellenblätter und speichert sie mit den angegebenen Namen.


Häufige Fehler und Lösungen

  • Fehler: "Object required"

    • Lösung: Stelle sicher, dass der Name der Tabelle korrekt ist. Ersetze Tabelle1 durch den tatsächlichen Namen oder verwende Sheets("Tabelle1").
  • Tabellen werden nicht gespeichert

    • Lösung: Überprüfe den angegebenen Pfad. Wenn Du den Pfad auf den Desktop legen möchtest, ändere die Zeile zu Pfad = "C:\Users\DeinBenutzername\Desktop\".

Alternative Methoden

Wenn Du keine VBA-Makros verwenden möchtest, kannst Du auch folgende Methoden ausprobieren:

  • Manuelles Teilen: Markiere die gewünschten Zeilen und kopiere sie in ein neues Tabellenblatt.
  • Power Query: Verwende Power Query, um große Datenmengen zu importieren und zu transformieren. Du kannst die Daten in kleinere Teile aufteilen, bevor Du sie in Excel lädst.

Praktische Beispiele

Angenommen, Du hast eine Excel-Tabelle mit 800 Zeilen. Mit dem obigen Makro kannst Du diese in 20 Tabellenblätter aufteilen, wobei jedes Blatt 40 Zeilen enthält. Die erstellten Blätter werden dann automatisch als Datei_1, Datei_2 usw. gespeichert.


Tipps für Profis

  • Nutze Fehlerbehandlung in Deinem VBA-Code, um mögliche Probleme während der Ausführung zu erfassen.
  • Experimentiere mit weiteren Funktionen wie Application.DisplayAlerts, um Benutzerinteraktionen zu minimieren.
  • Wenn Du regelmäßig Daten verarbeiten musst, erstelle eine benutzerdefinierte Schaltfläche in Excel zur Ausführung des Makros.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehr oder weniger als 40 Zeilen pro Tabelle zu teilen? Du kannst die Zahl in Step 40 in der For-Schleife ändern, um die gewünschte Zeilenanzahl pro Tabelle festzulegen.

2. Kann ich das Makro auch in anderen Excel-Versionen verwenden? Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen (z.B. Excel 2010, 2016, 2019) funktionieren. Stelle sicher, dass Du den richtigen Namen für Deine Tabellen verwendest.

3. Ist es möglich, die Daten in ein anderes Format zu speichern, z.B. als CSV? Ja, Du kannst den Speichervorgang anpassen, indem Du NeuMappe.SaveAs Pfad & strDateiName & "_Seite" & i, xlCSV verwendest, um die Datei im CSV-Format zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige