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

XLS aus Verz - bestimmte Spalten kopieren

XLS aus Verz - bestimmte Spalten kopieren
NESOFTLI
Hallo,
Ich hätte da folgendes Problem.
Habe in einem Verezeichnis - Excel Arbeitsmappen welche im Format gleich sind, nun bräuchte ich jeweils nur die Spalte D von Zeile 10 - 350 in einer neuen Arbeitsmappe.
Also als Erbebnis hätte ich dann z.B. bei 3 Dateien mit den Namen x, y, z im Verzeichnis eine Arbeitsmappe mit einer Tabelle wo in Spalte A10:A350 die Spalte D10-350 aus Datei X stehen würde und in Spalte B10-B350 die Spalte D10-D350 aus Datei Y usw.
Da ich es wöchentlich machen muss wäre eine Makrolösung wohl sehr erleichternd, könnte mir da jemand einen Tip geben oder eine Hilfestellung ?

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: XLS aus Verz - bestimmte Spalten kopieren
01.10.2009 15:59:17
Armin
Hallo,
zunächst möchte ich einmal etwas gerelles zu den Beiträgen im Forum bemerken.
Die Beschreibungen sind zum Teil sehr mager und man muss sich erst einmal überlegen was das Problem ist.
Aber es kommt noch besser. Wenn man schon Hilfe oder Unterstützung geben möchte, muss man sich erst mal ein Beispiel zusammen basteln. Zeit, Zeit, Zeit hat heute kaum noch jemand. Also bitte ein Beispiel macht es viel einfacher für den der helfen möchte.
Danke.
Gruß Armin
aus XLS in Verz bestimmte Spalten kopieren
02.10.2009 02:02:31
Erich
Hallo Vorname, ( zu Vornamen und Nicknames schau bitte mal in die Forums-FAQ )
mit den Beispielen war es ein klein wenig besser zu verstehen, mal abgesehen davon,
dass in deinen beiden Quelldateien die Quellspalten D leer sind (da sollte es wohl Spalte B sein).
Eine Frage bleibt (wie so oft) offen:
Eine Excelmappe (xls-Datei) beinhaltet eine Anzahl Tabellenblätter (0 bis n)
(0 geht auch, wenn z. B. die Mappe nur ein Diagrammblatt enthält).
Auch deine Beispiel-Quellmappen haben 3 Tabellenblätter.
Aus welchem dieser Blätter sollen die Daten übernommen werden?
- Aus dem zufällig nach dem Öffnen gerade aktiven Blatt? (Geht schief,
wenn das aktive Blatt kein Tabellenblatt ist.)
- oder aus dem 1. Tabellenblatt der Mappe (Worksheets(1))?
- oder aus einem Tabellenblatt mit einem bestimmten Namen (Worksheets("abc"))?
Hier sind die ersten beiden Möglichkeiten enthalten, teste mal:

Option Explicit
Sub SammleD()
Dim strVz As String, strF As String, lngSp As Long
strVz = "c:\temp"
Workbooks.Add xlWBATWorksheet
If Right(strVz, 1)  "\" Then strVz = strVz & "\"
Application.EnableEvents = False
'   Application.ScreenUpdating = False   ' NACH dem Test aktivieren
With ActiveWorkbook.Worksheets(1)
strF = Dir(strVz & "*.xls")
While strF  ""
If strF  ThisWorkbook.Name Then
lngSp = lngSp + 1
.Cells(9, lngSp) = Left(strF, Len(strF) - 4)
Workbooks.Open strVz & strF, False, True
' aus gerade aktivem Blatt
.Cells(10, lngSp).Resize(341) = ActiveSheet.Cells(10, 4).Resize(341).Value
' oder                                    ' aus 1. Tabellenblatt der Mappe
.Cells(10, lngSp).Resize(341) = Worksheets(1).Cells(10, 4).Resize(341).Value
Workbooks(strF).Close False
End If
strF = Dir()
If lngSp = ActiveSheet.Columns.Count Then
MsgBox "In der Zieltabelle ist keine Spalte mehr frei."
strF = ""
End If
Wend
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: aus XLS in Verz bestimmte Spalten kopieren
05.10.2009 14:09:44
NESOFTLI
Vielen Dank Erich
soweit so gut, leider wurde ich am Tag der Einstellung meiner Frage durch eine Grippe aus der Bahn geworfen und somit micht voll anwensend :-)
Im Anhang habe ich drei Dateien angehängt in denen mein Problem besser dargestellt wird.
die Musterdateien sind immer gleich mit einem Tabellenblatt.
Als Beispiel hierfür: Anlage Muster1.xls und Muster2.xls
In Ergebniss.xls ist dargestellt wie das Ergebnis aussehen soll.
Ich bitte um Entschludigung, daß es nicht auf Anhieb klar dargestellt worden ist.
Gruss
Wolfgang
https://www.herber.de/bbs/user/64887.xls Muster1.xls
https://www.herber.de/bbs/user/64888.xls Muster2.xls
https://www.herber.de/bbs/user/64889.xls Ergebniss.xls
Anzeige
Rückfrage
05.10.2009 16:44:25
Erich
Hi Wolfgang,
sorry, aber ich kann nicht so recht erkennen, was sich gegenüber deiner 1. Fragestellung geändert hat.
Zwei Neuerungen habe ich gesehen - die sind aber beide unkritisch:
- Die Quellmappen bestehen aus jeweils einem Tabellenblatt.
- Es waren die Zeilen 10 bis 350 (das sind 341 Zeilen).
Sollen es jetzt wirklich die Zeilen 10 bis 341 sein? (Das wären 332 Zeilen.)
Was an dem Code, den ich gepostet habe, passt nicht?
Hast du ihn überhaupt getestet?
Läuft er falsch oder gar nicht? Ist das Ergebnis falsch?
Die beiden Zeilen

' oder                                    ' aus 1. Tabellenblatt der Mappe
.Cells(10, lngSp).Resize(341) = Worksheets(1).Cells(10, 4).Resize(341).Value
kannst du löschen (da nur 1 Blatt in der Mappe).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Rückfrage
05.10.2009 17:27:47
NESOFTLI
Hallo Erich
Vielen Dank für die schnelle Rückmeldung
zur Frage 1: ja es sollen immer aus Spalte G die Zeilen 10 bis 341 sein.
zur Frage 2: Ja klar hab ihn geteste
Zur Frage 3: es wird in der neuen Mappe nur in zeile 09 (also der Dateiname eingetragen)
bei mir sind es 9 Dateien im Ordner also wird in Zeile 09 Von A - I jeweils nur der Dateiname
eingetragen.
...und eine Kleinigkeit von mir wäre noch, könnte es auch so sein das er nicht in Spalte A anfängt sondern erst in Spalte F ?
Vielen Dank vorab
Gruss Wolfgang
AW: Rückfrage
05.10.2009 17:27:54
NESOFTLI
Hallo Erich
Vielen Dank für die schnelle Rückmeldung
zur Frage 1: ja es sollen immer aus Spalte G die Zeilen 10 bis 341 sein.
zur Frage 2: Ja klar hab ihn geteste
Zur Frage 3: es wird in der neuen Mappe nur in zeile 09 (also der Dateiname eingetragen)
bei mir sind es 9 Dateien im Ordner also wird in Zeile 09 Von A - I jeweils nur der Dateiname
eingetragen.
...und eine Kleinigkeit von mir wäre noch, könnte es auch so sein das er nicht in Spalte A anfängt sondern erst in Spalte F ?
Vielen Dank vorab
Gruss Wolfgang
Anzeige
AW: Rückfrage
05.10.2009 19:27:16
Erich
Hi Wolfgang,
bei mir läuft das Makro einwandfrei.
Kann es sein, dass du so ganz nebenbei die Aufgabenstellung geändert hast?
Bisher ging es darum, Werte aus Spalte D der Quellmappen zu übertragen.
In deiner neuen Zielmappe geht es jetzt um die Quellspalte G.
In deinen beiden letzten Posts schreibst du, dass die Ausgabe in der Zielmappe in Spalte F beginnen soll,
in deiner neuen Zielmappe ist aber Spalte G die erste Ausgabespalte.
Da hättest du dich vielleicht besser vorher mit dir selbst geeinigt...
Hier ein neuer Code zum Testen:

Sub SammleG()
Dim strVz As String, strF As String, lngSp As Long
strVz = "c:\test"
Workbooks.Add xlWBATWorksheet
lngSp = 6                        ' Spalten 1 bis 6 (A:F) bleiben leer
If Right(strVz, 1)  "\" Then strVz = strVz & "\"
Application.EnableEvents = False
'   Application.ScreenUpdating = False   ' NACH dem Test aktivieren
With ActiveWorkbook.Worksheets(1)
strF = Dir(strVz & "*.xls")
While strF  ""
If strF  ThisWorkbook.Name Then
lngSp = lngSp + 1
.Cells(9, lngSp) = Left(strF, Len(strF) - 4) ' Dateiname in Zeile 9
Workbooks.Open strVz & strF, False, True
' Daten von G10:G341 ab Zeile 10
.Cells(10, lngSp).Resize(332) = Worksheets(1).Cells(10, 7).Resize(332).Value
Workbooks(strF).Close False
End If
strF = Dir()
If lngSp = ActiveSheet.Columns.Count Then
MsgBox "In der Zieltabelle ist keine Spalte mehr frei."
strF = ""
End If
Wend
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Noch eine Frage: Warum hast du mir nicht gleich heute Mittag dein Testergebnis geschrieben?
Oder sollte ich das selbst noch mal Testen und den Fehler(?) selbst finden...?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Rückfrage
06.10.2009 08:47:01
NESOFTLI
Hallo Erich
Nein ich habe die Aufgabenstellung nicht mit Absicht geändert, dachte nur das es mit den neuen Beispielen einfacher zu verstehen wäre weil es das direkte Original ist.
Hatte in keiner Weise vor Dir mehr Arbeit zu machen !!!
Bin ja froh um jede Hilfe.
nun zum Ergebnis:
Wenn ich Deinen Code in eine Mappe einfüge und ihn ablaufen lasse läuft er ohne Probleme durch,
jedoch ist in der Zielmappe als Ergebnis nur in den Spalten ab G in Zeile 09 der jeweilige Dateiname
eingetragen, die Zellen darunter sind leer.
Ich weiss beim besten willen nicht warum es bei Dir anscheinend geht und bei mir nicht.
Gruss
Wolfgang
Anzeige
Wo ist der Code?
06.10.2009 09:38:02
Erich
Hi Wolfgang,
an welcher Stelle hast du denn den Code in die Mappe eingefügt?
Könnte es sein, dass der Code nicht in einen "normalen" Modul (mit Namen Modul1 o.ä.) steht,
sondern im Modul der Mappe ("DieseArbeitsmappe") oder einer Tabelle?
Der Code gehört in ein normales Modul, also in VBA:
"Einfügen - Modul", dort den Code hineinkopieren.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Wo ist der Code?
06.10.2009 10:43:58
NESOFTLI
Hallo Erich,
Danke, danke also ich stelle fest das ich mal wieder nicht genau genug geschaut habe ...
du hattest recht... es war nicht im Modul eingefügt...
nun hat es geklappt. Dafür vielen Dank !!!
Falls es Dir nicht zuviel Mühe macht, hätte ich noch eine Frage als Erweiterung, wäre es
möglich als allerletzte Spalte im eine Summenspalte einzufügen ? Für die Zeilen ab 10 ?
vielen Dank und lieben gruss
Wolfgang
Anzeige
mit Summenspalte
06.10.2009 13:32:17
Erich
Hi Wolfgang,
schön, dass es jetzt funzt!
Hier noch eine Version mit Summenspalte hinter der letzten übertragenen Spalte:

Sub SammleG()
Dim strVz As String, strF As String, lngSp As Long
strVz = "c:\test"
Workbooks.Add xlWBATWorksheet
lngSp = 6                        ' Spalten 1 bis 6 (A:F) bleiben leer
If Right(strVz, 1)  "\" Then strVz = strVz & "\"
Application.EnableEvents = False
'   Application.ScreenUpdating = False   ' NACH dem Test aktivieren
With ActiveWorkbook.Worksheets(1)
strF = Dir(strVz & "*.xls")
While strF  ""
If strF  ThisWorkbook.Name Then
lngSp = lngSp + 1
.Cells(9, lngSp) = Left(strF, Len(strF) - 4) ' Dateiname in Zeile 9
Workbooks.Open strVz & strF, False, True
' Daten von G10:G341 ab Zeile 10
.Cells(10, lngSp).Resize(332) = _
ActiveWorkbook.Worksheets(1).Cells(10, 7).Resize(332).Value
Workbooks(strF).Close False
End If
strF = Dir()
If lngSp = ActiveSheet.Columns.Count Then
MsgBox "In der Zieltabelle ist keine Spalte mehr frei."
strF = ""
End If
Wend
.Cells(10, lngSp + 1).Resize(332).FormulaR1C1 = "=SUM(RC7:RC[-1])"
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: mit Summenspalte
06.10.2009 16:50:05
NESOFTLI
Hallo Erich
Funktioniert wirklich sehr gut !!!
Nochmals vielen Dank für die freundliche, kompetente sowie vorallem flexible Hilfe
Gruss
Wolfgang
AW: Rückfrage
06.10.2009 10:33:12
NESOFTLI
Hallo Erich
Nein ich habe die Aufgabenstellung nicht mit Absicht geändert, dachte nur das es mit den neuen Beispielen einfacher zu verstehen wäre weil es das direkte Original ist.
Hatte in keiner Weise vor Dir mehr Arbeit zu machen !!!
Bin ja froh um jede Hilfe.
nun zum Ergebnis:
Wenn ich Deinen Code in eine Mappe einfüge und ihn ablaufen lasse läuft er ohne Probleme durch,
jedoch ist in der Zielmappe als Ergebnis nur in den Spalten ab G in Zeile 09 der jeweilige Dateiname
eingetragen, die Zellen darunter sind leer.
Ich weiss beim besten willen nicht warum es bei Dir anscheinend geht und bei mir nicht.
Gruss
Wolfgang

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige