Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Erstellung Tabellenblätter abh von Spaltenanzahl

Erstellung Tabellenblätter abh von Spaltenanzahl
Spaltenanzahl
Hallo liebes Forum,
habe bereits im Archiv (auch anderer Foren gesucht), aber nicht das Richtige gefunden. Ich möchte über die Anzahl gefüllter Spalten, welche variabel ist, ein Tabellenblatt auf mehrere Blätter aufteilen, wobei je Blatt drei gefüllte Spalten erscheinen sollen.
Im Prinzip in der Art:
Anzahl Spalten (ab Spalte F) geteilt durch 3 = Anzahl neu zu erstellender Blätter
Zur Ermittlung der Anzahl kann die Zeile 8 genutzt werden.
Zur Tabelle:
Die Spalten A:E beinhalten Zeilenbeschriftung, Summe etc., sind also fix.
Die Spalten ab F sind in der Anzahl Variabel.
Viele Zellen weisen Bezüge, auch auf andere Tabellenblätter auf, daher können keine Spalten gelöscht werden oder so.
Meine bisherige Lösung:
Ich kopiere das Ursprungstabellenblatt entsprechend obiger Formel (zurzeit manuell) und blende dann jeweils die nicht interessierenden Spalten aus. Natürlich habe ich hierfür ein Makro, jedoch muss ich dieses jedes Mal an meine Tabelle manuell anpassen. Unten habe ich ein Makrobeispiel für eine Tabelle mit variablen Spalten von F bis Q, also 12 Spalten aufgeführt, die auf 4 Blätter verteilt werden sollen.
Mein Wunsch:
Da die Anzahl der Spalten auch mal 3stellig werden kann, sollte das Makro die Anzahl der variablen Spalten ermitteln, wobei der Wert aufgerundet werden muss (z.B. bei 10 Spalten brauche ich 4 Blätter, wenn max. 3 Spalten je Blatt aufgeführt werden sollen), dann die entsprechende Anzahl Tabellenblätter erstellen, und in diesen die Spalten ausblenden, die in dem jeweiligen Tabellenblatt nicht interessieren oder anders ausgedrückt: in Blatt (2) sollen die Spalten F/G/H, in Blatt (3) I/JK, etc zu sehen sein.
Sub Aufteilung_Tabelle()
' Aufteilung_Tabelle Makro
' Tastenkombination: Strg+t
'Kopieren der Tabellenblätter
Sheets("MErmittlung").Select
Sheets("MErmittlung").Copy After:=Sheets(1)
Sheets("MErmittlung").Select
Sheets("MErmittlung").Copy After:=Sheets(2)
Sheets("MErmittlung").Select
Sheets("MErmittlung").Copy After:=Sheets(3)
Sheets("MErmittlung").Select
Sheets("MErmittlung").Copy After:=Sheets(4)
'entsprechende Spalten im jeweiligen Tabellenblatt ausblenden, Spalten A:E sind fest
Sheets("MErmittlung (2)").Select
Columns("I:Q").Select
Selection.EntireColumn.Hidden = True
Sheets("MErmittlung (3)").Select
Range("F:H,L:Q").Select
Selection.EntireColumn.Hidden = True
Sheets("MErmittlung (4)").Select
Range("F:K,O:Q").Select
Selection.EntireColumn.Hidden = True
Sheets("MErmittlung (5)").Select
Columns("F:N").Select
Selection.EntireColumn.Hidden = True
End Sub
Anbei eine stark vereinfachte Beispieltabelle.
https://www.herber.de/bbs/user/70886.xls
Kann mir hierbei jemand helfen?
Mit freundlichen Grüßen
Tobias
Tabellenblätter pro 3 Spalten aufteilen
04.08.2010 11:15:58
NoNet
Hallo Tobias,
hier das gewünschte Makro :
Sub TabellePro3SpaltenSplitten()
Dim wsMErmittlung As Worksheet, wsNeu As Worksheet
Dim lngS As Long
Set wsMErmittlung = Worksheets("MErmittlung")
'Schleife von 6 bis letzte Spalte der Zeile 8 in 3er Schritten
For lngS = 6 To Cells(8, Columns.Count).End(xlToLeft).Column Step 3
Set wsNeu = Sheets.Add(after:=Sheets(Sheets.Count)) 'Neues Blatt am Ende
wsMErmittlung.Range("A:E").Copy wsNeu.[A1] 'Spalten A:E kopieren
wsMErmittlung.Columns(lngS).Resize(, 3).Copy wsNeu.[F1]
Next
MsgBox "Fertig !"
End Sub
Gruß, NoNet
PS: Die Namen der Tabellenblätter musst Du evtl. noch anpassen !
Anzeige
AW: Erstellung Tabellenblätter abh von Spaltenanzahl
04.08.2010 11:17:27
Spaltenanzahl
Hallo,
Sub aufteilen()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To Application.RoundUp((Sheets("ermittlung").Cells(8, Columns.Count).End(xlToLeft). _
Column - 5) / 3, 0)
Sheets("ermittlung").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
.Columns.Hidden = True
.Columns("A:E").Hidden = False
.Columns((i - 1) * 3 + 6).Resize(, 3).Hidden = False
Application.Goto .Cells(1, 1), True
End With
Next i
End Sub

Gruß
Rudi
AW: Erstellung Tabellenblätter abh von Spaltenanzahl
04.08.2010 11:38:04
Spaltenanzahl
Hallo NoNet und Rudi,
vielen Dank für Eure Hilfe.
Das Makro von Rudi ist genau das, wie ich es mir gewünscht habe - super, und vorallem so kurz!.
Das Makro von NoNet funktioniert auch, jedoch mit der Einschränkung, dass Bezüge, z.B. bei der Summation einer Zeile über alle Spalten hinweg, nicht mehr die gesamte Tabelle berücksichtigen, sondern nur das jeweilige Tabellenblatt. Liegt daran, dass die jeweiligen Spalten immer in F-H eingefügt werden, und damit stimmt der Bezug leider nicht mehr. Dennoch vielen Dank für die Mühe und Antwort.
Einen schönen Tag noch Euch beiden.
Gruß
Tobias
Anzeige
AW: Erweiterung noch möglich?
04.08.2010 12:08:09
strodti
Hallo nochmal,
insbesondere NoNet und Rudi,
besteht die Möglichkeit, in dem Makro von Rudi noch einzufügen, dass vor Erstellung der Tabellenblätter bereits erstellte Tabellenblätter gelöscht werden? Habe nämlich (dummerweise) bei 95 Spalten und damit 32 neu erstellten Tabellenblättern das Makro zweimal ausgeführt - und jetzt 64 Blätter. Diese manuell zu markieren und löschen dauert :-)!
Es wäre also klasse, wenn das Makro im Vorfeld prüft, ob es diese Blätter bereits gibt oder so ähnlich, und wenn ja löscht.
Das Makro könnte auch ruhig separat sein, wenn dieses die Anzahl Blätter mit gleichem Namen (hier "MErmittlung" + lfd Zahl) löscht (aber nicht die Ursprungstabelle!!).
Für Hilfe wäre ich wieder sehr dankbar.
MfG
Tobias
Anzeige
Diese manuell zu markieren und löschen dauert :-)!
04.08.2010 12:25:18
Rudi
Hallo,
Unsinn!
1. Blatt markieren, Shift drücken, letztes Blatt markieren und löschen.
Gruß
Rudi
AW: Diese manuell zu markieren und löschen dauert :-)!
04.08.2010 12:29:26
strodti
Hi Rudi,
natürlich bin ich bereits so bewandert, dass ich mit Shift arbeiten kann und es auch tue, dennoch danke für den Hinweis.
Aber da ich faul bin und ich immer wieder von den Möglichkeiten in VBA begeistert bin, dachte ich, es wäre vielleicht möglich, dies automatisch machen zu lassen.
Ansonsten haste recht, so lang dauert es nun auch wieder nicht.
Bis denn und vielen Dank,
Tobias
AW: Erweiterung noch möglich?
04.08.2010 12:38:30
Rudi
Hallo,
Sub aufteilen()
Dim i As Integer
Application.ScreenUpdating = False
LoescheSheets "Ermittlung*(*)"
For i = 1 To Application.RoundUp((Sheets("ermittlung").Cells(8, Columns.Count).End(xlToLeft).  _
_
Column - 5) / 3, 0)
Sheets("ermittlung").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
.Columns.Hidden = True
.Columns("A:E").Hidden = False
.Columns((i - 1) * 3 + 6).Resize(, 3).Hidden = False
Application.Goto .Cells(1, 1), True
End With
Next i
End Sub

Sub LoescheSheets(strSuch As String)
Dim wks As Worksheet
For Each wks In Worksheets
If wks.Name Like strSuch Then
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True
End If
Next
End Sub

Gruß
Rudi
Anzeige
AW: Rudi - Du bist super
04.08.2010 12:51:51
strodti
Hi Rudi,
vielen Dank dass Du meine Auffassung des Faulseins teilst. Genauso hatte ich es mir vorgestellt (ich hätte es nicht besser machen können :-)!!!)
Nochmals vielen Dank.
Mit absolut fröhlichen Grüßen
Tobias
geschlossen owT
04.08.2010 12:57:25
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige