Variable Tabelle kopieren und in neue Excel-Datei verschieben
Guten Zusammen,
ich bin grad Praktikant bei einem Unternehmen und muss aus verschiedenen Excel Dateien die jeweils eine Tabelle haben eine groß Datei machen.
Eine Datei ist Folgendermaßen aufgebaut es ist eine Art Logbuch das bei Zelle A29 anfängt und N29 endet. Nach unten hin ist sie Variable je nachdem wie viel Einträge vorhanden sind.
Nun muss ich alle Dateien durchsuchen die Tabellen kopieren und in eine neue Datei schreiben.
Meine Probleme sind:
- Ich kann einen Wertebereich definieren aber nur einen festen. Wie kann ich es so programmieren das es variabel ist und den Wertebereich so setzt das es erkennt hier kommt nichts mehr?
- Wenn ich den Wertebereich habe, kann ich ihn zwar kopieren aber nur in der Excel-Datei, heißt wenn ich es in eine neue Datei kopieren will funktioniert es nicht.
Wäre schön wenn Ihr mir weiterhelfen könntet. Bin was VBA angeht Neuling.
Gruß Gimli3311
ich bin grad Praktikant bei einem Unternehmen und muss aus verschiedenen Excel Dateien die jeweils eine Tabelle haben eine groß Datei machen.
Eine Datei ist Folgendermaßen aufgebaut es ist eine Art Logbuch das bei Zelle A29 anfängt und N29 endet. Nach unten hin ist sie Variable je nachdem wie viel Einträge vorhanden sind.
Nun muss ich alle Dateien durchsuchen die Tabellen kopieren und in eine neue Datei schreiben.
Meine Probleme sind:
- Ich kann einen Wertebereich definieren aber nur einen festen. Wie kann ich es so programmieren das es variabel ist und den Wertebereich so setzt das es erkennt hier kommt nichts mehr?
- Wenn ich den Wertebereich habe, kann ich ihn zwar kopieren aber nur in der Excel-Datei, heißt wenn ich es in eine neue Datei kopieren will funktioniert es nicht.
Wäre schön wenn Ihr mir weiterhelfen könntet. Bin was VBA angeht Neuling.
Gruß Gimli3311
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 263949
Url: https://administrator.de/contentid/263949
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo, leider habe ich nicht so ganz verstanden, wo jetzt das Problem ist.
Wenn du einen variablen Bereich hast kannst du die Daten als Tabelle formatieren und dieser einen Namen geben (z.B. Log1) und mit diesem Namen dann alle Daten, welche in der Tabelle liegen ansprechen.
Wenn du diese Daten jetzt in einem anderen Dokument verknüpfen möchtest, sollte dir hier geholfen werden.
https://support.office.com/de-AT/article/eine-Beziehung-zwischen-zwei-Ta ...
Ich hoffe ich konnte dir etwas weiterhelfen!
Mit freundlichen Grüßen,
Robin
Wenn du einen variablen Bereich hast kannst du die Daten als Tabelle formatieren und dieser einen Namen geben (z.B. Log1) und mit diesem Namen dann alle Daten, welche in der Tabelle liegen ansprechen.
Wenn du diese Daten jetzt in einem anderen Dokument verknüpfen möchtest, sollte dir hier geholfen werden.
https://support.office.com/de-AT/article/eine-Beziehung-zwischen-zwei-Ta ...
Ich hoffe ich konnte dir etwas weiterhelfen!
Mit freundlichen Grüßen,
Robin
hallo,
das läuft in etwa so, wie Du es auch in Excel selbst machen würdest:
- Mappe öffnen
- das richtige Blatt auswählen
- in Spalte A ganz nach unten springen - auf [A65535]
- mit Ctlr-Cursor_hoch auf die letzte gefüllte Zelle springen
In VBA geht das so:
- Mappe öffnen
- das richtige Blatt auswählen
- letzte gefüllte Zeile bestimmen:
Rows.count ist soweit ich weiß immer 65535, besser, man verwendet keine Konstante.
Hier wird die letzte Zelle in Spalte A bestimmt. Wenn das unsicher ist, ob die gefüllt ist, dann nimm eine andere Spalte.
So bestimmst Du den Bereich, der zu kopieren ist.
Dann kopierst Du den Inhalt, am besten auf eine VBA-Variable und nicht in die Zwischenablage, so etwa:
- zur Gesamtmappe wechseln und dort hineinkopieren, etwa
Du kannst Dir ja merken, wo die nächste freie Zeile in der Gesamttabelle ist.
HTH,
goldfisch
das läuft in etwa so, wie Du es auch in Excel selbst machen würdest:
- Mappe öffnen
- das richtige Blatt auswählen
- in Spalte A ganz nach unten springen - auf [A65535]
- mit Ctlr-Cursor_hoch auf die letzte gefüllte Zelle springen
In VBA geht das so:
- Mappe öffnen
- das richtige Blatt auswählen
With worksheets("Bla")... End With)
maxrow = Range(Cells(1, 1), Cells(1, Rows.count).End(xlUp).row
Hier wird die letzte Zelle in Spalte A bestimmt. Wenn das unsicher ist, ob die gefüllt ist, dann nimm eine andere Spalte.
So bestimmst Du den Bereich, der zu kopieren ist.
Dann kopierst Du den Inhalt, am besten auf eine VBA-Variable und nicht in die Zwischenablage, so etwa:
- DIM tab as Variant
tab = range("A29:N" & maxrow).value
workbooks("Gesamt").worksheets(1).[A500].value = tab
Du kannst Dir ja merken, wo die nächste freie Zeile in der Gesamttabelle ist.
HTH,
goldfisch
Moin zusammen,
das ist schnell zusammengeschrotet . Guckst du hier:
(In Zeile 4 einfach den Pfad zu den *.xlsx Dateien angeben und freuen. Die Daten werden im aktuellen Sheet untereinander zusammengefasst. Der Rest ist im Code kommentiert)
Gruß jodel32
das ist schnell zusammengeschrotet . Guckst du hier:
(In Zeile 4 einfach den Pfad zu den *.xlsx Dateien angeben und freuen. Die Daten werden im aktuellen Sheet untereinander zusammengefasst. Der Rest ist im Code kommentiert)
Sub ImportTables()
Dim wb As Workbook, fso As Object, rngOut As Range, f As String
'Pfad in dem die *.xlsx Dateien liegen
Const PATHFILES = "D:\daten"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With ActiveSheet
'erste Ausgabezelle festlegen
Set rngOut = .Range("A1")
'hole die erste *.xlsx-Datei des Ordners
f = Dir(PATHFILES & "\*.xlsx")
'Loope solange bis alle Dateien verarbeitet wurden
Do While f <> ""
'öffne Datei
Set wb = Workbooks.Open(PATHFILES & "\" & f, ReadOnly:=True)
'kopiere den Inhalt der Tabelle in das aktuelle Sheet
With wb.Sheets(1)
.Range("A29:N" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy rngOut
End With
'schließe Dokument wieder
wb.Close False
'Ausgabezelle für den nächsenm Import ermitteln
Set rngOut = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
'hole Namen der nächsten Datei
f = Dir
Loop
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub