Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Tabellenblätter in ein Tabellenblatt übertragen
#1
Hallo Zusammen, ich habe mehrere Tabellenblätter mit Spalten A-G und 26 Zeilen.
Mit welchem Makro kann ich den Inhalt der Tabellenblätter ca. 15 Stück in einem Tabellenblatt untereinander auflisten lassen.
Danach soll der Inhalt des geschaffenen Tabellenblattes nach einer bestimmten Spalte hin aufsteigend (Zahlen) sortiert werden.

Ich habe jetzt folgendes Makro verwendet. Allerdings weiß ich nicht warum es jede Tabelle 4 Mal aufgelistet wird. 
Sub Tabellenzusammen()

'Zusammenfassen der Tabellen mit Überschriften ( Zeile 1 )
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer

Set Wks = Worksheets.Add
Wks.Name = "Tabellenzusammen"

For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
  strLC = .Cells(.Rows.Count, .Columns.Count).Address
  Set Bereich = .Range("A2:" & strLC)
  Bereich.Copy Destination:= _
  Wks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i
End Sub
Antworten Top
#2
Hallo,

es gibt keine Makros für bestimmte Aufgaben, es sei denn, man programmiert sie sich.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
ich habe ein Makro bei dem ich aber das Problem habe das jede Tabelle 4 Mal in der Zusammenfassung auftaucht.
Antworten Top
#4
Auch Hallo,

die Add-Methode hat auch Parameter

Zitat:Parameter
PARAMETER
Name Erforderlich/Optional Datentyp Beschreibung
Before Optional Variant Ein Objekt, das das Blatt angibt, vor dem das neue Blatt hinzugefügt wird.
After Optional Variant Ein Objekt, das das Blatt angibt, hinter dem das neue Blatt hinzugefügt wird.
Count Optional Variant Die Anzahl der hinzuzufügenden Zeilen. Der Standardwert ist die Anzahl der ausgewählten Blätter.
Typ Optional Variant Gibt den Blatttyp an. Kann eine der folgenden XlSheetType -Konstanten sein: xlWorksheet, xlChart, xlExcel4MacroSheetoder xlExcel4IntlMacroSheet. Wenn Sie ein Blatt basierend auf einer vorhandenen Vorlage einfügen, geben Sie den Pfad zu der Vorlage an. Der Standardwert ist xlWorksheet.

und wenn man die nicht angibt, kann folgendes passieren.
Zitat:Wenn Before und After nicht angegeben werden, wird das neue Blatt vor dem aktiven Blatt eingefügt.

Das heißt, wenn bei dir nicht das erste Tabellenblatt aktiv ist, wird das Tabellenblatt zwischendrin eingefügt und vom diesen auch was in deiner Zusammenfassung eingefügt.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#5
Hallo Thomas,

muss es unbedingt VBA sein? Wenn nicht, schau dir mal PowerQuery (Daten / Abrufen und transformieren) an.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#6
Hallo

wenn dıe Zusammenfassung an 1. Stelle stehen soll dann aendere bitte diese Zeile:   Set Wks = Worksheets.Add(before:=Worksheets(1))
Im Code wird "Wks" als Zieltabelle verwendet. Zur Sicherheit kann man eine İF Anweisung einbauen um das Blatt "Zusammen" zu überspringen.

@Steffi   Amüsanter Fehler bei UsedRange!!   Ich kann ihn technisch nicht erklaeren. 
Ich habe fürs Forum eine Testdatei, wo ich alle Module die ich testen will rein kopiere. Mit Tabellen wie der Frager sie verwendet.  Seinen Code habe ich mit MsgBox zum testen durchgeschickt, un d einen verblüffenden Fehler festgestellt. In meiner 1. Tabelle stehen in A2 und C2 nur die Werte "1" und "Info", sonst nichts!!  In Zeile 1 erfolgte KEINE Eingabe, die ist komplett leer.  Beim Test mit der MsgBox wurde der leere Bereich von "A3:C3" kopiert, obwohl im Makro eindeutig als 1. Zelle "A2" steht. Hast du dafür eine technische Erklaerung??? Warum UsedRange hier versagt??

Baue es evtl. bitte mal mit einer kleinen Testdatei nach, ob der Effekt beim leeren Blatt auch bei dir aufttitt??  Bin gespannt auf dein Ergebnis.
@Frager:   dein Code funktioniert ansonsten einwandfrei.  Ich konnte kein 4mal kopieren feststellen!!  Es sei denn du ruft das Makro mehrfach auf???

mfg Gast 123

Code:
Sub Tabellenzusammen()

'Zusammenfassen der Tabellen mit Überschriften ( Zeile 1 )
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer

Set Wks = Worksheets.Add(before:=Worksheets(1))
Wks.Name = "Tabellenzusammen"

For i = 2 To Worksheets.Count
If Worksheets(i).Name <> "Tabellenzusammen" Then
With Worksheets(i).UsedRange
  strLC = .Cells(.Rows.Count, .Columns.Count).Address
  Set Bereich = .Range("A2:" & strLC)
 
Worksheets(i).Select
  Bereich.Select
  Bereich.Copy
  MsgBox strLC
  MsgBox Bereich.Address

  Bereich.Copy Destination:= _
  Wks.Cells(Rows.Count, 1).End(xlUp).Offset(3, 0)
End With
End If
Next i
End Sub
Antworten Top
#7
Hallo,

(04.03.2021, 12:05)Gast 123 schrieb: @Steffi   Amüsanter Fehler bei UsedRange!!   Ich kann ihn technisch nicht erklaeren. 
Ich habe fürs Forum eine Testdatei, wo ich alle Module die ich testen will rein kopiere. Mit Tabellen wie der Frager sie verwendet.  Seinen Code habe ich mit MsgBox zum testen durchgeschickt, un d einen verblüffenden Fehler festgestellt. In meiner 1. Tabelle stehen in A2 und C2 nur die Werte "1" und "Info", sonst nichts!!  In Zeile 1 erfolgte KEINE Eingabe, die ist komplett leer.  Beim Test mit der MsgBox wurde der leere Bereich von "A3:C3" kopiert, obwohl im Makro eindeutig als 1. Zelle "A2" steht. Hast du dafür eine technische Erklaerung??? Warum UsedRange hier versagt??

Baue es evtl. bitte mal mit einer kleinen Testdatei nach, ob der Effekt beim leeren Blatt auch bei dir aufttitt??  Bin gespannt auf dein Ergebnis.

ein kleiner Hinweis: Ich heiße Stefan oder meinetwegen Steffl aber nicht Steffi.
bezüglich UsedRange hast du einen kleinen Denkfehler. Aus wievielen Zeilen besteht dein UsedRange? Und worauf bezieht sich dein Range? Übrigens: Du brauchst nicht selektieren und auch deine If-Abfrage ist nicht nötig, weil Du die Zusammenfassung als erstes Blatt hast und deine For-Schleife bei 2 beginnt.

PHP-Code:
Sub Tabellenzusammenaus_CEF()

'Zusammenfassen der Tabellen mit Überschriften ( Zeile 1 )
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer

Set Wks = Worksheets.Add(before:=Worksheets(1))
Wks.Name = "Tabellenzusammen"

For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
  strLC = .Cells(.Rows.Count, .Columns.Count).Address
  Set Bereich = .Cells  '
.Range("A2:" strLC)
 
  
Bereich.Copy
  MsgBox strLC
  MsgBox Bereich
.Address

  Bereich
.Copy Destination:= _
  Wks
.Cells(Wks.Rows.Count1).End(xlUp).Offset(30)
End With
Next i
End Sub 
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#8
Hallo

@Stefan    ich bitte dich um Entschuldigung für die falsche Ansprache. 

Select verwende ich nur zum Test, wenn mir etwas unklar ist, und ich mir den definierten Bereich genauer anschauen will.  Ideal gekürzt funktioniert der Code dann so:

mfg Gast 123

Code:
Sub Tabellenzusammenaus_CEF()
'Zusammenfassen der Tabellen mit Überschriften ( Zeile 1 )
Dim Wks As Worksheet
Dim i As Integer
Set Wks = Worksheets.Add(before:=Worksheets(1))
Wks.Name = "Tabellenzusammen"

For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
  .Cells.Copy Destination:= _
  Wks.Cells(Wks.Rows.Count, 1).End(xlUp).Offset(3, 0)
End With
Next i
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Steffl
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste