Megatabelle teilen

Hallo Experten,
ich habe eine für mich ziemlich große Tabelle A1:AK326.
Um sie in eine vorgegebene Word-Dokumentenvorlage packen zu können, möchte ich sie in Einzelteile zerlegen und sie in neue Arbeitsblätter kopieren. Dabei sollen die Werte aus den Spalten A und B immer übernommen und an den Anfang der neuen Tabelle gesetzt werden.
Der Zerlegungsbereich wäre etwa in der Art (wobei ich die genaue Anzahl der Zellen pro Einzelteil noch nicht weiß, weil ich das vom Layout erst ausprobieren muss; die folgenden Angaben sollen nur ein Beispiel sein):
C1:E4
F1:H4 usw.
C5:E8
F5:H8 usw.
Vielen Dank im Voraus,
lynndinn

ich habe eine für mich ziemlich große Tabelle A1:AK326.
Um sie in eine vorgegebene Word-Dokumentenvorlage packen zu
können, möchte ich sie in Einzelteile zerlegen und sie in neue
Arbeitsblätter kopieren. Dabei sollen die Werte aus den
Spalten A und B immer übernommen und an den Anfang der neuen
Tabelle gesetzt werden.
C1:E4
F1:H4 usw.
C5:E8
F5:H8 usw.

Hallo lynndinn,

Sub dd()
Dim wks1 As Worksheet, Zei1 As Long, Spa1 As Long
Set wks1 = Worksheets("Tabelle1")
For Zei1 = 1 To wks1.Cells(Rows.Count, 1).End(xlUp).Row Step 4
 For Spa1 = 3 To wks1.Cells(1, Columns.Count).End(xlToLeft).Column Step 3
 Worksheets.Add after:=Worksheets(Worksheets.Count)
 With ActiveSheet
 .Name = Replace("Blatt" & Cells(Zei1, Spa1).Resize(4, 3).Address, ":", "\_")
 wks1.Cells(Zei1, 1).Resize(4, 2).Copy Destination:=.Cells(1, 1)
 wks1.Cells(Zei1, Spa1).Resize(4, 3).Copy Destination:=.Cells(1, 3)
 End With
 Next Spa1
Next Zei1
End Sub

Willst du in der Testphase die Blätter wieder weg haben um das makro nochmals ablaufen zu lassen, so nimm diesen Code. Nur die drei links stehenden Blätter bleiben erhalten.

Sub Loeschen()
Dim W As Long
Application.DisplayAlerts = False
For W = Worksheets.Count To 4 Step -1
 Worksheets(W).Delete
Next W
Application.DisplayAlerts = True
End Sub

Gruß
Reinhard

Hallo Reinhard,
wie immer kapier ich´s nicht gleich bei 1. mal.
Hab dei Code ordentlich eingefügt (das kann ich immerhin schon :smile:
Bei Starten kommt dann aber eine Meldung Syntaxfehler bei der Zeile:
For Spa1 = 3 To wks1.Cells(1,
Was mache ich falsch?
Und außerdem, woran erkenne ich, dass ich die ersten beiden Spalten immer mitziehen möchte? Also: Wo muss ich modifizieren, wenn ich nur die erste Spalte mitziehen will?
Und noch ein Problem: Im Original gibt es einige Zellen die durch „Zellen verbinden“ entstanden sind, d.h. die Tabelle sieht nicht ganz gleichmäßig aus. Muss ich in diesen Fällen die Zellen wieder trennen (Wie macht man das?)

Vielen Dank und Gruß,
lynndinn

hallo Lynndinn,

Bei Starten kommt dann aber eine Meldung Syntaxfehler bei der
Zeile:
For Spa1 = 3 To wks1.Cells(1,

k.A., ich habe den Code kurz getestet, hat funktioniert.

Was mache ich falsch?

Tja nun, irgendwas, aber aus der Ferne weiß ich nicht was :smile:

Magst du eine Beispielmappe basteln wo der Fehler auftritt und die hochladen mit FAQ:2606

Und außerdem, woran erkenne ich, dass ich die ersten beiden
Spalten immer mitziehen möchte? Also: Wo muss ich
modifizieren, wenn ich nur die erste Spalte mitziehen will?

Das wird mit dem Resize festgelgt, da bedeutet die 2 = zwei Spalten.
Mach daraus eine 1.

Und noch ein Problem: Im Original gibt es einige Zellen die
durch „Zellen verbinden“ entstanden sind, d.h. die Tabelle
sieht nicht ganz gleichmäßig aus.

Verbundene Zellen machen nix als Ärger, versuche darauf zu verzichten.

Muss ich in diesen Fällen
die Zellen wieder trennen (Wie macht man das?)

Weiß ich nicht auswendig weil ich Zellen nie verbinde.
Verbinde Zellen, dann zeichne ein Makro auf wenn du sie wieder trennst, dann hast du den Code.

Gruß
Reinhard

schau mal unter:
http://rapidshare.com/files/265154867/Testtabelle.xl…

schau mal unter:
http://rapidshare.com/files/265154867/Testtabelle.xl…

Hallo Lynn,

schau an, du bist also im Flensburger Segelclub (FSC) :smile:

Und, es fiel mir schon bei deinem Posting auf,
es heißt nicht
For Spa1 = 3 To wks1.Cells(1,
sondern
For Spa1 = 3 To wks1.Cells(1, Columns.Count).End(xlToLeft).Column Step 3

Wenn der Vb-Editor Codezeilen grün oder rot markiert, ich kann das nicht unterscheiden, ist was faul.

Überprüfe dahingehend deinen Code.

Wenn du das korrigiert hast und das Problem besteht weiterhin, lade halt die mappe nochmal hoch.

Gruß
Reinhard

schau an, du bist also im Flensburger Segelclub (FSC) :smile:

Das verstehe ich nicht. Ich bin zwar Segler, aber nicht in Flensburg. Oder ist das ein Insider-Spruch, den ich nicht kapiere?

Überprüfe dahingehend deinen Code.

Wenn du das korrigiert hast und das Problem besteht weiterhin,
lade halt die mappe nochmal hoch.

Also das ist doch zu dumm! Wieso hab ich dein Code nicht richtig kopiert. Wahrscheinlich die Hitze.
Jetzt funzts völlig so wie gewollt.
Vielen Dank,
lynndinn

Hallo Lynn,

schau an, du bist also im Flensburger Segelclub (FSC) :smile:

Das verstehe ich nicht. Ich bin zwar Segler, aber nicht in
Flensburg. Oder ist das ein Insider-Spruch, den ich nicht
kapiere?

nix Schlimmes. Gelegentlich schaue ich unter Datei—Eigenschaften nach, da steht halt bei dir FSC.
Und danach habe ich gegoogelt, so kam ich auf den Flensburger Club.
Daß dein FSC hüchstwahrscheinlich etwas anderes bedeutet war mir schon klar :smile:

Jetzt funzts völlig so wie gewollt.

Schön.

Gruß
Reinhard

ne, das kommt von Fujitsu Siemens Computer und ist schon seit Kauf so. War zu faul, es umzubenennen…

Hallo Reinhard,
ein Problem habe ich nun doch noch. Wie kann ich auch die 1. Zeile mit den Überschriften „rüberziehen“ (ähnlich wie bei der 1. Spalte)? Welche Zahl ist dafür veranrwortlich?
Bisher habe ich folgendes herausbekommen:

Sub dd()
Dim wks1 As Worksheet, Zei1 As Long, Spa1 As Long
Set wks1 = Worksheets(„Tabelle1“)
For Zei1 = 1 To wks1.Cells(Rows.Count, 1).End(xlUp).Row Step 8
Rem 8: Zahl der zu kopierenden Zeilen
For Spa1 = 3 To wks1.Cells(1, Columns.Count).End(xlToLeft).Column Step 11
Rem 11: Zahl der zu kopierenden Spalten
Worksheets.Add after:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = Replace(„Blatt“ & Cells(Zei1, Spa1).Resize(8, 11).Address, „:“, „_“)
wks1.Cells(Zei1, 1).Resize(8, 1).Copy Destination:=.Cells(1, 1)
Rem Cells(1,1): zweite Zahl = ab Spalte 2
wks1.Cells(Zei1, Spa1).Resize(8, 11).Copy Destination:=.Cells(1, 2)
End With
Next Spa1
Next Zei1
End Sub

Aber trotzt allen Probierens (und Grübelns) finde ich nicht die Lösung, das Moduk so anzupassen, dass jetzt auch noch die Titelzeile mit übernommen wird.
Gruß,
lynndinn

ein Problem habe ich nun doch noch. Wie kann ich auch die 1.
Zeile mit den Überschriften „rüberziehen“ (ähnlich wie bei der

  1. Spalte)? Welche Zahl ist dafür veranrwortlich?

Hallo Lynn,

ungetestet:

Sub dd()
Dim wks1 As Worksheet, Zei1 As Long, Spa1 As Long
Set wks1 = Worksheets("Tabelle1")
For Zei1 = 2 To wks1.Cells(Rows.Count, 1).End(xlUp).Row Step 8
 Rem 8: Zahl der zu kopierenden Zeilen
 For Spa1 = 2 To wks1.Cells(1, Columns.Count).End(xlToLeft).Column Step 11
 Rem 11: Zahl der zu kopierenden Spalten
 Worksheets.Add after:=Worksheets(Worksheets.Count)
 With ActiveSheet
 .Name = Replace("Blatt" & Cells(Zei1, Spa1).Resize(8, 11).Address, ":", "\_")
 wks1.Cells(Zei1, 1).Resize(8, 1).Copy Destination:=.Cells(1, 1)
 wks1.Cells(1, Spa1).Resize(1, 11).Copy Destination:=.Cells(1, 1)
 Rem Cells(1,1): zweite Zahl = ab Spalte 2
 wks1.Cells(Zei1, Spa1).Resize(8, 11).Copy Destination:=.Cells(1, 2)
 End With
 Next Spa1
Next Zei1
End Sub

Gruß
Reinhard

Hallo Reinhard,
vielen Dank für deine Antwort, aber wahrscheinlich habe ich mich zu ungenau ausgedrückt. Bei deinem Makro wird ja nur jewiels A1 mit dem Titel beschrieben. Ich wollte aber, dass in den Teiltabellen immer sowohl die gesamte Spalte A (Parameterangaben) als auch die gesamte Zeile 1 (Titelangaben) wiedergegeben werden, so dass die eigentlichen Daten immer erst ab B2:xxxx auftauchen.
Gruß,
lynndinn

Hallo lynn,

vielen Dank für deine Antwort, aber wahrscheinlich habe ich
mich zu ungenau ausgedrückt.

ich glaub nicht daß es an dir lag. Ich schrieb ja ungetestet, d.h. sowas ist immer Fehleranfällig.

Ich teste mal …

Gruß
Reinhard

Hallo Reinhard,
das ist lieb von dir. Und bei der Gelegenheit würde ich dich gleich noch mal nerven:
was ändert sich, wenn ich nicht nur die 1. sondern die 1. - 3. Zeile immer mitziehen will?
Am besten du kommentierst mir die entsprechenden Angaben.
Dank dir,
lynndinn

Hallo Lynn

das ist lieb von dir. Und bei der Gelegenheit würde ich dich
gleich noch mal nerven:
was ändert sich, wenn ich nicht nur die 1. sondern die 1. - 3.
Zeile immer mitziehen will?

nicht groß viel wenn ich erst mal den Code hätte um das mit der ersten Zeile hinzukriegen.
Da hänge ich noch fest.

Irgendwie beschämend für mich daß ich nicht mal mit zwei For-Schleifen klarkomme, aber ist grad so *Schulterzuck*

Mal schauen ob ich das einzige Mittel anwende was dagegen hilft. Also PC ausschalten, in ein Straßencafe gehen o.ä., ablenken.
Dann in zwei Stunden wieder an das Problem gehen, neuer Ansatz, lösen :smile:

Am besten du kommentierst mir die entsprechenden Angaben.

Erst den Bären, dann das Fell :smile:)

Gruß
Reinhard

Hallo Reinhard,
inzwischen ist mir klar geworden, dass die Aufgabe doch viel komplizierter ist, als ich angenommen hatte. Ich will ja beim Zerlegen der Tabelle nicht die gesamte 1. Spalte und die gesamten 1.-3. Zeilen übernehmen, sondern immer nur den jeweils entsprechenden Ausschnitt, der zu den zerstückelten Daten passt. Weißt du was ich meine?
Ist das Problem denn überhaupt lösbar oder muss ich jetzt alle meine Riesentabellen (pro Bundesland mind. 2) manuell zerteilen, indem ich die jeweiligen Felder lösche?
Gruß,
lynndinn

Hallo Lynn,

inzwischen ist mir klar geworden, dass die Aufgabe doch viel
komplizierter ist, als ich angenommen hatte. Ich will ja beim
Zerlegen der Tabelle nicht die gesamte 1. Spalte und die
gesamten 1.-3. Zeilen übernehmen, sondern immer nur den
jeweils entsprechenden Ausschnitt, der zu den zerstückelten
Daten passt. Weißt du was ich meine?

ich meine ja.

Ist das Problem denn überhaupt lösbar

Auch da meine ich ja. Deine Anfrage ist ein schwerer Angriff auf mein Selbstbewußtsein, kann doch irgendwie gar nicht sein daß ich nicht mit zwei For-Schleifen zurecht komme. Aber ist grad so :frowning:

Um aber unterschiedliche Problemauffassungen auszuschließen mache bite folgendes.

Nimm eine leere Mappe. schreibe im ersten Blatt in A1 rein
=zeichen(64+Spalte())&zeile()
Dann kopiere das ausreichend nach unten und rechts.
Dann alles markieren und Strg+c, dann Bearbeiten–Inhalte einfügen—Werte.

So. Dann erstelle in anderen Blättern durch manuelles Kopieren das was nachher ein Makro erzeugen soll.

Und 8 Zeilen und 11 Spalten Blöcke sind nicht nötig, weniger reicht auch.

Und2, mir reichen da 2-5 andere Blätter.

Hochladen dann mit FAQ:2606

Gruß
Reinhard

Hallo Reinhard,
sei mir bitte nicht böse, aber ich habe einfach eine meiner Supertabellen genommen und sie ein klein wenig manuell zerstückelt, so wie ich mir das automatisiert vorstelle. Schau mal unter:

http://rapidshare.com/files/265860373/Testtabelle_sp…

Die ersten 4 Zeilen und die 1. Spalte wurden zuerst ausschnittsweise in die entsprechenden Arbeitsblätter rüberkopiert. Dann die entsprechenden Felder von den jeweils passenden „Startzellen“ aus eingebaut.
Wenn ich als blutiger Laie das so sehe, müsste man doch im Prinzip auch so eine Routine laufen lassen, die, nachdem man für die passenden „Koordinatenausschnitte“ (damit meine ich die entsprechenden Angaben in Spalte A bzw. Zeilen 1-4) gesorgt hat, von „einstellbaren“ Startzellen aus einen entsprechenden Dateienbereich rüberkopiert.
Aber sicherlich sind meine Vorstellungen zu blauäugig.
Meine Stückelung in dem Beispiel ist:

  1. Spalten B-M für Zeilen 5-84
  2. Spalten N-y für Zeilen 5-84
  3. Spalten z-AJ für Zeilen 5-84
  4. Spalten B-M für Zeilen 85-165
  5. Spalten N-y für Zeilen 85-165
    und so müsste das weitergehen.
    Gruß,
    lynndinn