Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1480to1484
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

Excel VBA: Define UsedRange: 1. Zeile weglassen

Excel VBA: Define UsedRange: 1. Zeile weglassen
09.03.2016 13:20:19
Kilian
Hallo zusammen,
Ich habe eine Excel mit verschiedenen Tabllen. Diese Tabellen haben alle die gleiche Spaltenstruktur mit denselben Überschriften. Die Zeilenanzahl wird vermutlich unterschiedlich sein. Tabelle 1 ist leer, Tabelle2,3,4,5 usw. enthalten die Daten, die einfach nur untereinander in Tabelle 1 kopiert werden sollen. Das habe ich mit Hilfe von Google soweit hin bekommen. Mein Problem jetzt: Das Makro kopiert mir auch die jeweiligen Überschriften aus Zeile 1 mit in Tabelle 1. Das Makro soll aber immer erst in der 2. Zeile starten.
Sub TabellenKopierenUntereinander()
Dim i As Integer With ActiveWorkbook
For i = 2 To .Worksheets.Count
Set Rng = .Worksheets(i).UsedRange
Set rng1 = Worksheets(1).Cells(Rows.Count, "B").End(xlUp)(2)
Rng.Copy Destination:=rng1
Next
End With
End Sub
Ich nehme mal an, dass ich hier was mit der UsedRange verändern muss, komm aber nicht drauf, was und wie genau.
Alternativ hätte ich noch einen anderen Code gefunden, bei dem es perfekt funktioniert nur nimmt er mir immer die letzte Spalte nicht mit. Sprich, wenn ich 7 Spalten habe, kopiert mir nur 6, wenn ich 20 habe nur 19, etc.
Sub BCopy()
Dim i As Long
Dim sName As String
'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False
'alle Blätter kopieren und in neues einfügen
For i = 2 To Worksheets.Count
Sheets(i).Select
Sheets(i).Range(Cells(2, 1), Cells(Sheets(i).UsedRange.Rows.Count, Sheets(i).UsedRange. _
Columns.Count)).Copy
Sheets(1).Paste Destination:=Sheets(1).Cells(Sheets(1).UsedRange.Rows.Count + 1, 1)
Next i
'Zwischenablage leeren
Application.CutCopyMode = False
'Gesamtblatt anzeigen
Sheets(1).Select
'optimale Anpassung der Spalten
Columns.AutoFit
'Bildschirmaktualisierung einschalten
Application.ScreenUpdating = True
End Sub
Wäre überagend, wenn mir hier jemand weiterhelfen könnte!
Beste Grüße
Kilian

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA: Define UsedRange: 1. Zeile weglassen
09.03.2016 13:34:51
Daniel
Hi
einfachste Lösung:

Set Rng = .Worksheets(i).UsedRange.Offset(1, 0)
das Offset verschiebet den Bereich um eine zeile nach unten.
das hierbei die erste Leerzeile unterhalb der Usedrange mit kopiert wird, dürfte in der Praxis nicht weiter stören.
wenn du genau die Usedrange ohne die erste Zeile haben willst, dann so:
set Rng = Worksheets(i).Usedrange
set Rng = Intersect(Rng, Rng.Offset(1, 0))
oder
set Rng = Worksheets(i).UsedRange
set Rng = Rng.Resize(Rng.Rows.count - 1).Offset(1, 0))
oder
set Rng = Range(Worksheets(i).Range("A2"), Worksheets(i).Cells.SpecialCells(xlcelltypelastcell))
Gruß Daniel

Anzeige
AW: Excel VBA: Define UsedRange: 1. Zeile weglassen
09.03.2016 13:47:28
Kilian
SUUUUPER!!!
Vielen, vielen, vielen Dank Daniel!!

AW: Excel VBA: Define UsedRange: 1. Zeile weglassen
09.03.2016 15:09:35
Kilian
Hallo Daniel,
in der Ausführung habe ich nun leider doch noch ein Problem:
In der Testdatei mit 4 Zeilen funktioniert alles wunderbar.
In der "echten" Datei mit über 2000 Zeilen leider nicht.
Hier kopiert er mir den Inhalt von Tabelle 2&3 (weitere Tabellen sind zZ noch nicht mit Daten befüllt) wunderbar in Tabelle 1 und anschließend kopiert er mir nochmals Daten, von denen ich nicht weiß wo sie hergezogen werden, inkl. den Überschriften von Tabelle 1 und hängt das ganze nach unten dran.
Kann das daran liegen, dass die "Praxis"-Datei im Gegensatz zu Testdatei mit anderen Excel-Dateien verknüpft ist?
Gruß

Anzeige
AW: Excel VBA: Define UsedRange: 1. Zeile weglassen
09.03.2016 15:20:33
Kilian
/edit:
Habe den Fehler entdeckt:
Das Problem war, dass es ein zusätzliches verstecktes Datenblatt gab.
Also die nächste Frage:
Was muss ich programmieren, dass bestimmte Blätter entweder durch Nennung des Namens des Blattes oder vll auch auch durch Bezeichnung "letztes","vorletztes" etc., ausgeschlossen werden?
Grüße und vielen Dank!

AW: Excel VBA: Define UsedRange: 1. Zeile weglassen
09.03.2016 15:28:22
Daniel
Hi
im Prinzip so, beim ersten Case listest du alle Namen derjenigen Blätter auf, bei denen nichts passieren soll, den Code zum Bearbeiten schreibst du dann ins Case Else:
For i = 1 to ThisWorkbook.Worksheets.Count
Select Case Worksheets(i).Name
Case "Tabelle1", "Tabelle2", "Tabelle3"
Case Else
hier dann dein Code
End Select
Next
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge