Anzeige
Archiv - Navigation
1496to1500
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

Syntax um mehrere Excel-Dateien auszuwerten

Syntax um mehrere Excel-Dateien auszuwerten
07.06.2016 15:15:02
Matthias
Geehrte Forum-Gemeinde,
Ich wende mich bezüglich einer etwas komplizierten Anfrage an Euch. Ausserdem bin ich ein VBA-Einsteiger, möchte jedoch gerne dazulernen weil mich die (a priori noch theoretischen) Möglichkeiten faszinieren.
In einem Hauptordner existieren ca. 20 Unterordner, die allesamt an die 20-30 Excel-Dateien enthalten.
Mittels VBA sollen die diversen Excel-Dateien, die alle samt identisch aufbereitet sind (also die gleiche Struktur haben), ausgewertet werden und die Auswertungen in ein zentrales Excel-File kopiert werden.
Verschiedene Abteilungen bzw. Mitarbeiter führten Listen mit verkauften Artikeln, bereits bezahlten Artikel und wieder stornierten Artikeln. Dazu wurde eine Artikel-Nr. und eine Artikel-Bezeichnung erfasst. Diese versch. Dateien sollen nun quasi für Auswertungen, Vergleiche etc. zusammengeführt bzw. ausgewertet werden. Ausserdem will man zukünftig weg von dieser Methodik bzw. eine etwas einfachere/standardisiertere Methode wählen.
Die Dateibeschriftungen der Excel-Files sehen so aus (als Beispiel):
12_SalesReg_32_LAG.xlsx
Die Inhalte der Excel-Dateien weisen folgende Struktur auf:
In Spalte A: (+/-); In Spalte B: Zusammengesetzte Nr. oder -----; Spalce C: Artikelname & Code oder ------
Alle Produkte bezahlt
------ ------
+ 4547.7755 Artikel ABC
+ 4354.9677 Artikel XYZ
+ 3632.1254 Artikel MNO
+ 4100.0201 Artikel PQR
- 9698.3300 Artikel EFG
- 7810.2500 Artikel TUV
Alle Produkte bezahlt
------ ------
+ 4547.7755 Artikel ABC
+ 4354.9677 Artikel XYZ
- 3632.1254 Artikel MNO
- 4100.0201 Artikel PQR
- 9698.3300 Artikel EFG
- 7810.2500 Artikel TUV
+ ------ ------
+ 2705.6301 Artikel KLM
+ 5454.0004 Artikel WER
- 3201.1707 Artikel HIJ
- 6022.7405 Artikel BMN
- 9698.3300 Artikel EFG
- 7810.2500 Artikel TUV
Alle Produkte bezahlt
------ ------
+ 4547.7755 Artikel ABC
+ 4354.9677 Artikel XYZ
- 3632.1254 Artikel MNO
- 6022.7405 Artikel BMN
- 9698.3300 Artikel EFG
Alle Produkte bezahlt
Was ausgewertet werden soll:
1) Aus Dateiname; erste Zahl (zwei Stellen): 12_SalesReg_32_LAG.xls = 12
--> Ins zentrale Excel-File in die Spalte mit Bezeichnung "AbtNr"
--> Dies wollte ich über den FileDialog mit folgendem Eintrag lösen:
Debug.Print Right("ABCD", 2)
CD
2) Aus Dateiname; zweite Zahl (zwei Stellen): 12_SalesReg_32_LAG.xls = 32
--> Ins zentrale Excel-File in die Spalte mit Bezeichnung "PeriodNr"
--> Auch dies wollte ich über den FileDialog mit dem o.g. Eintrag lösen.
3) Dichotomisierte Ausgabe, beim Eintrag "Alle Produkte bezahlt": wenn "Alle Produkte bezahlt" steht = 1; Sonst = 0)
--> Ins zentrale Excel-File in die Spalte mit Bezeichnung "AllSold"
4) Auswerten ob in Spalte A (+/-) ein + oder - steht und übertrag ins zentrale Excel-File in Spalte mit Bezeichnung "+/-"
5) Erste vier Ziffern (vor dem Punkt) der Artikel-Nr. (z.b 6022.7405: "6022" davon auswerten bzw. ins zentrale Excel-File kopieren)
6) Letzten vier Ziffern (nach dem Punkt) der Artikel-Nr. (z.b 6022.7405: "7405" davon auswerten bzw. ins zentrale Excel-File kopieren)
7) Kopieren der Artikelbezeichnung ins zentrale Excel-File; z.B. Artikel ABC kopieren
Idealerweise könnte man eine VBA-Syntax auf mehrere versch. Dateien (die allesamt aber ident. strukturiert sind; selbe Spaltenpositionen, selbe Formate) anwenden und VBA wertet die gewünschten Einträge ins zentrale Excel-File aus. Ich stelle mir vor, dass ich via VBA angebe, dass er alle xlsx im besagten Haupt- bzw. Unterordner durchgeht und dabei die Syntax anwendet. Dabei würde ich pro Zeile jede einzelne Spalte durchgehen:
Dim Zeile as Integer
Do
...
Zeile = Zeile + 1
loop until ...
Mir ist aber noch nicht ganz klar, welche Befehle für die oben aufgeführten 7 Punkte überhaupt nötig wären, damit die Auswertungen auch korrekt vorgenommen und das zentrale Excel-Sheet kopiert werden.
Das zentrale Excel-File, verfügt über folgende Spaltenbeschriftungen:
AbtNr PeriodNr ArtKrzel RegNr AllSold -/+ ArtListe ArtNr ArtTitle
Ich hatte bereits versucht, dies über "SelectCase" bzw. über die "BedingteKopieZeilen()" zu lösen. Dies scheint wohl aber nicht zu funktionieren bzw. ist nicht der korrekte Weg.
Z.B.
Public Sub Zeilen2()
Dim i As Integer
Dim cell As Range
i = 1
For Each cell In Eingabe.Range("C71:C877")
If Not cell Is Nothing Then
If cell.Value > "0" Then
cell.EntireRow.Copy 'Destination:=Tabelle2.Rows(i)
Tabelle1.Cells(i, 1).PasteSpecial , Paste:=xlPasteValues
i = i + 1
End If
End If
Next cell
End Sub
Oder Ansätzen wie
If .Cells(Zeile, 3).Value = "+" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
Leider bisher ziemlich erfolglos - Evtl. setze ich als kompletter Neuling auch völlig am falschen Ort an.
Hätte jemand von Euch nützliche Tipps bzw. geeignete Formeln um dieses Problem zu lösen?
Vielen Dank im Voraus.
Freundliche Grüße
Matthias G.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Syntax um mehrere Excel-Dateien auszuwerten
07.06.2016 15:37:02
Fennek
Hallo,
nur zum ersten Teil, um die Zahlen aus dem Dateinamen auszulesen:

Sub Matthias()
Tx = Cells(12, "A")
Ta = Split(Tx, "_")
Debug.Print "AbtNr = " & Ta(0), "PeriodNr = " & Ta(2)
End Sub
Im Text ober ist die Rede von "20 Unterordner mit jeweils 20-30 Dateien": die erste Aufgabe wäre eine Abfrage für die Dateinamen. Wie heißt der "Basis-Ordner", gibt es in dieser Struktur auch andere xlsx-Dateien?
mfg

AW: Syntax um mehrere Excel-Dateien auszuwerten
07.06.2016 15:52:02
Matthias
Hallo,
Herzlichen Dank für diesen ersten wertvollen Input!
Der Basis-Ordner heisst:
Datenaufbereitung
(Kann evtl. noch ändern bzw. könnte ich dann immernoch in der Syntax entspr. anpassen)
In diesem Ordner sind dann Unterordner drin, wie z.B.
01_Abteilung_1
02_Abteilung_2
etc.
In diesen Unterordnern dann jeweils xlsx-Dateien, wie z.B.:
01_SalesReg_21_LAG.xlxs
02_SalesReg_22_LAG.xlsx
03_SalesReg_23_LAG.xlsx
04_SalesReg_17_LAG.xlsx
..
.
51_SalesReg_32_LAG.xls
Alle Dateien in den Unterordnern müssten anhand der Syntax ausgewertet und die entsprechenden Werte in die zentrale Excel-Datei kopiert werden. Es sind keine anderen Dateien vorhanden, welche nicht in der Gesamtauswertung erscheinen sollen.

Anzeige
AW: Syntax um mehrere Excel-Dateien auszuwerten
07.06.2016 16:11:33
Fennek
Hallo,
folgender Code liest die DateiNamen und daraus abgeleitet die AbtNr und PeriodNr aus.
Da ich die Datei nicht kenne werden die Werte in die Spalten A-C geschrieben.
Der Pfad muss komplett angegeben werden, also z.B. C:\users\Matthias\Datenaufbereitung\

Sub Fen_dir()
'Pfad anpassen 
mfg
(Deine anderen Fragen sollen andere beantworten)

AW: Syntax um mehrere Excel-Dateien auszuwerten
08.06.2016 22:19:17
Fennek
Hallo Matthias,
hier ein Versuch, der zeigt, wie es gehen könnte. Für die Demo habe ich die Daten in eine TXT-Datei geladen und dann importier. Dies müsste durch ein workbooks.open ersetz werden. Auch die Spalten in der Master-Datei müssen noch modifiziert werden.
https://www.herber.de/bbs/user/106105.xls
mfg

Anzeige
AW: Syntax um mehrere Excel-Dateien auszuwerten
14.06.2016 18:38:13
Matthias
Hallo
Besten Dank für deinen tollen Einsatz!
Das heisst ich müsste ein workbooks.open Befehl angeben, dem ich quasi die Zieldatei angebe? Z.B. "Team_1"? Dort soll er ja dann alle Excel-Dateien abarbeiten.
Bez. der Anpassung der Zeilen in der Masterdatei meinst du die Angaben aus .Cells(m, "A") etc. und den anderen Angaben die in deinem Test mit "T4, T5" etc. ausgewiesen werden?
Freundliche Grüsse
Matthias

AW: Syntax um mehrere Excel-Dateien auszuwerten
14.06.2016 23:57:38
Matthias
Hallo
Besten Dank für deinen tollen Einsatz!
Vorab, meine Anwort wurde offensichtlich nicht gepostet. Deshalb hier nochmal:
Wenn ich dich richtig verstanden habe, muss ich deine Syntax noch anpassen:
workbooks.open einfügen, damit alle Excel-Dateien in den jeweiligen Unterordnern abgegriffen werden?
Wo füge ich den Pfad des Masterfiles ein, damit alle ausgewiesenen Daten an den richtigen Zielort gelangen? Bezüglich den Spalten im Masterfile: Reicht es, die Bezeichnungen korrekt in der Syntax einzugeben und im Masterfile einzutragen, damit dies funktioniert?
sPath entspricht ja dem Ursprungsordner, der abgegriffen werden soll?
sPath = "c:\tmp\datenaufbereitung\"
sn = Split(CreateObject("wscript.shell").exec("cmd /c dir ""c:\tmp\datenaufbereitung\*.txt"" /b/s").stdout.readall
Im Bereich dir geb ich an, dass alle *.xls genommen werden sollen, ja?
Ich müsste dann wohl auch die Angaben mit .Cells anpassen?
.Cells(m, "A") = AbtNr
.Cells(m, "B") = PeriodNr
.Cells(m, "C") = Allsold
Spaltenzahl zur entsprechenden Bezeichnung, oder? Kann ich dies hier unterhalb weiterführen?
Besten Dank!
Viele Grüsse
Matthias
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige