Daten aus verschiedenen excel Dateien in ein neues Dokument kopieren und Sortieren
excelxp 02
Ich habe folgendes Problem und kann mit meinen Fähigkeiten keine Lösung finden.
Deshalb hoffe ich, dass es jemand anderes kann.
folgendes es gibt Projektkalkulationen gesamtzahl flexibel je nach Lage (nennen wir sie P-Kalkulationen) in der P-Kalkulatione sind alle kosten nach Budgetlinien/Kostenarten aufgelistet in einzelnen 9 tabellenblätter, um die Projekte jedoch untereinander vergleichbar zu machen ist es notwendig alle Projekte (bsp 7), das heisst es gibt auch 7 P-kalkulationen zusammenzufassen in der "P-Zusammenführung"
in der Zusammenführung gibt es 2 Blätter 1 Auflistung Projektname und Speicherort der Datei (=zelle....) und ein weiteres tabellenblatt in dem alle Kosten aus der P-Kalkulation übernommen, untereinander aufgelistet & nach Datum sortiert werden sollen.l
Das Problem liegt in der variablen Anzahl der P-Kalkulationen, den unterschiedlichen Speicherorten und der Bezeichnung der Datei.
Die zu kopierenden Daten befinden sich auf insgesamt 9 Blättern in der P-Kalkulation und sind in jeder P-Kalkulation in idetnischen Bereichen zu finden. Interessant sind 3 Spalten Parten, wann und total. alle daten auf den 9 Tebellenblättern befinden sich im Bereich B5:g104 die Spalten Partner und wann sind bei jedem Tabellenblatt in der P-kalkulation an der selben Stelle. Lediglich total ändert seine spalte zwischen e, f oder g
Meine Idee: Wenn in der ZUsammenführung eine neue P-Kalkulation eingetragen wird, könnte sich eine Abfrage zum Speicherort öffnen und nach Auswahl der Datei Die Kostenpositionen in die "tabelle 4" der P-Zusammenführung kopieren und sortieren. Zu beachten wäre dabei nur, dass alte Daten von P-Kalkulationen nicht überschrieben werden nur insofern der Eintrag/Verweis in der P-Zusammenführung entfernt wird, dass auch alle aufgelistetetn kosten des Projekts aus der tabelle 4 gelöscht werden.
leere zellen können in der p-Zusammenführung gelöscht werden.
Würde mich freuen, wenn irgendjemand mit nem makro bzw. vba Code oder irgendwas der gleichen mir helfen könnte.
Insofern jemand die zwei Dateien benötigt einfach an john.wes.777@gmail.com schreiben, schick sie dann umgehend rum.
und falls sich noch jemand für meine traurige Stelle interessiert, dann sind wohl alle Fragen damit beantwortet, dass ich ca. 10h/day sitze keinen Cent dafür bekomme und ich -Gott sei Dank - mein Studium bald fortsetzen kann.
Danke für alle Helfenden und Helfer.
grüße Thomas
Hallo herausfordernder john Thomas wes!
Nein, da die benamselung individuell vorgenommen wird, ein kriteritum ist jedoch dass alle (abhängig davon wie viele projekte stattefinden, bsp: bei 7 Projekten muss es auch p-kalkulationen geben, jedoch ist der dateiname variabel) In dem EINEN jeweiligen Verzeichnis liegen sollen & es werden nur P-Kaluationen sein(jedoch wie bereits erwähnt mit unterschiedlichen Dateibezeichnungen)
Gibt es für die Unterscheidung zwischen Projektdateien und anderen Excel-Dateien des Verzeichnisses (wie etwa "P-Zusammenfassung.xls") ein brauchbares Kriterium im Dateinamen (etwa: Nur Projektdateien sollen das Präfix "P-" aufweisen.), damit eine automatische Verarbeitung stattfinden kann, oder soll gelten: Nur explizit "angeforderte" Projektdateien (etwa über ein Eingabefenster) sollen in die Zusammenfassung übernommen werden?
Die Idee mit dem Präfix ist gut - einfach, leicht umzusetzen.
Generell obliegt es völlig deiner kreativität wie die "Dinger" (P-Kalkulationen heissen können)
Eingabefenster wäre ein krasser Luxus, würde aber auch gleichzeitig die fehlerquote steigern deshalb finde ich deine Idee mit dem Präfix einfach spitze
Desweiteren liegen die Dateien ja alle im selben Ordner
mein fehler, war ursprünglich nur weil total sich sonst immer durch multiplikation ergab, dort jedoch unnötig ist, da der benutzer die Kosten selber eingibt und sich diese nicht berechnen.
Können wir aber gern umbenennen um den Vorgang zu erleichtern ist kein problem.
"Alle Kosten" ist gleichzusetzen mit "alle Einträge der 9 Tabellen in den genannten 3 Spalten"?
Ja, Richtig!
Wenn ja, ist die Kennzeichnung der Kostenposition - zB "A/I 1" bis "A/I 100" in der Tabelle "Ausrüstung" - ebenfalls zu übernehmen?
Stimmt wäre logisch, hast recht! so lassen sich die Kosten im nachhinein noch den kostenarten zuordnen.
Wenn die einzelnen Kosten den Projekten zuordenbar bleiben sollen (um sie zB, wie angesprochen, wieder löschen zu können), sollte dann zB in einer weiteren Spalte der Dateiname der Projektdatei in jeder Zeile erfasst werden?
Ich kann wieder nur sagen gute Idee daran habe ich noch nicht gedacht ja natürlich ist die kennzeichnung auch notwendig.
Deine Antworten würde ich als Boardmail im Forum bevorzugen - ob und was von den (hoffentlich) entstehenden Ergebnissen Eingang ins Forum finden soll/wird, können wir später noch überlegen.
Grüße
bastla
Danke Dir bastla allein für die guten fragen und die kritische prüfung.
Hohe Anerknnung
Grüße
task thomas wes
Ich habe folgendes Problem und kann mit meinen Fähigkeiten keine Lösung finden.
Deshalb hoffe ich, dass es jemand anderes kann.
folgendes es gibt Projektkalkulationen gesamtzahl flexibel je nach Lage (nennen wir sie P-Kalkulationen) in der P-Kalkulatione sind alle kosten nach Budgetlinien/Kostenarten aufgelistet in einzelnen 9 tabellenblätter, um die Projekte jedoch untereinander vergleichbar zu machen ist es notwendig alle Projekte (bsp 7), das heisst es gibt auch 7 P-kalkulationen zusammenzufassen in der "P-Zusammenführung"
in der Zusammenführung gibt es 2 Blätter 1 Auflistung Projektname und Speicherort der Datei (=zelle....) und ein weiteres tabellenblatt in dem alle Kosten aus der P-Kalkulation übernommen, untereinander aufgelistet & nach Datum sortiert werden sollen.l
Das Problem liegt in der variablen Anzahl der P-Kalkulationen, den unterschiedlichen Speicherorten und der Bezeichnung der Datei.
Die zu kopierenden Daten befinden sich auf insgesamt 9 Blättern in der P-Kalkulation und sind in jeder P-Kalkulation in idetnischen Bereichen zu finden. Interessant sind 3 Spalten Parten, wann und total. alle daten auf den 9 Tebellenblättern befinden sich im Bereich B5:g104 die Spalten Partner und wann sind bei jedem Tabellenblatt in der P-kalkulation an der selben Stelle. Lediglich total ändert seine spalte zwischen e, f oder g
Meine Idee: Wenn in der ZUsammenführung eine neue P-Kalkulation eingetragen wird, könnte sich eine Abfrage zum Speicherort öffnen und nach Auswahl der Datei Die Kostenpositionen in die "tabelle 4" der P-Zusammenführung kopieren und sortieren. Zu beachten wäre dabei nur, dass alte Daten von P-Kalkulationen nicht überschrieben werden nur insofern der Eintrag/Verweis in der P-Zusammenführung entfernt wird, dass auch alle aufgelistetetn kosten des Projekts aus der tabelle 4 gelöscht werden.
leere zellen können in der p-Zusammenführung gelöscht werden.
Würde mich freuen, wenn irgendjemand mit nem makro bzw. vba Code oder irgendwas der gleichen mir helfen könnte.
Insofern jemand die zwei Dateien benötigt einfach an john.wes.777@gmail.com schreiben, schick sie dann umgehend rum.
und falls sich noch jemand für meine traurige Stelle interessiert, dann sind wohl alle Fragen damit beantwortet, dass ich ca. 10h/day sitze keinen Cent dafür bekomme und ich -Gott sei Dank - mein Studium bald fortsetzen kann.
Danke für alle Helfenden und Helfer.
grüße Thomas
Hallo herausfordernder john Thomas wes!
anbei p-Kalkulation = Kalkulation von projekte ungewisse Anzahl und
Benennung der Dateien, werden aber alle im selbern verzeichnis liegen
Benennung der Dateien, werden aber alle im selbern verzeichnis liegen
Damit würde sich die Kennzeichnung des einzelnen Projekts auf den Dateinamen (ohne Pfadangabe) reduzieren - richtig?
Nein, da die benamselung individuell vorgenommen wird, ein kriteritum ist jedoch dass alle (abhängig davon wie viele projekte stattefinden, bsp: bei 7 Projekten muss es auch p-kalkulationen geben, jedoch ist der dateiname variabel) In dem EINEN jeweiligen Verzeichnis liegen sollen & es werden nur P-Kaluationen sein(jedoch wie bereits erwähnt mit unterschiedlichen Dateibezeichnungen)
Gibt es für die Unterscheidung zwischen Projektdateien und anderen Excel-Dateien des Verzeichnisses (wie etwa "P-Zusammenfassung.xls") ein brauchbares Kriterium im Dateinamen (etwa: Nur Projektdateien sollen das Präfix "P-" aufweisen.), damit eine automatische Verarbeitung stattfinden kann, oder soll gelten: Nur explizit "angeforderte" Projektdateien (etwa über ein Eingabefenster) sollen in die Zusammenfassung übernommen werden?
Die Idee mit dem Präfix ist gut - einfach, leicht umzusetzen.
Generell obliegt es völlig deiner kreativität wie die "Dinger" (P-Kalkulationen heissen können)
Eingabefenster wäre ein krasser Luxus, würde aber auch gleichzeitig die fehlerquote steigern deshalb finde ich deine Idee mit dem Präfix einfach spitze
Desweiteren liegen die Dateien ja alle im selben Ordner
p-Zusammenfassung = auf tabelle 4 Sollen alle kosten der Tabellenblätter
Personal bis Evaluation untereinander zusammengefasst werden
relevant sind die Informationen
"Partner"
"Wann"
"total"
Personal bis Evaluation untereinander zusammengefasst werden
relevant sind die Informationen
"Partner"
"Wann"
"total"
Anmerkung: Die Tabellen "Untervertrag" und "Evaluation" haben keine Spalte "Total" oä
mein fehler, war ursprünglich nur weil total sich sonst immer durch multiplikation ergab, dort jedoch unnötig ist, da der benutzer die Kosten selber eingibt und sich diese nicht berechnen.
Können wir aber gern umbenennen um den Vorgang zu erleichtern ist kein problem.
"Alle Kosten" ist gleichzusetzen mit "alle Einträge der 9 Tabellen in den genannten 3 Spalten"?
Ja, Richtig!
Wenn ja, ist die Kennzeichnung der Kostenposition - zB "A/I 1" bis "A/I 100" in der Tabelle "Ausrüstung" - ebenfalls zu übernehmen?
Stimmt wäre logisch, hast recht! so lassen sich die Kosten im nachhinein noch den kostenarten zuordnen.
Wenn die einzelnen Kosten den Projekten zuordenbar bleiben sollen (um sie zB, wie angesprochen, wieder löschen zu können), sollte dann zB in einer weiteren Spalte der Dateiname der Projektdatei in jeder Zeile erfasst werden?
Ich kann wieder nur sagen gute Idee daran habe ich noch nicht gedacht ja natürlich ist die kennzeichnung auch notwendig.
Deine Antworten würde ich als Boardmail im Forum bevorzugen - ob und was von den (hoffentlich) entstehenden Ergebnissen Eingang ins Forum finden soll/wird, können wir später noch überlegen.
Grüße
bastla
Danke Dir bastla allein für die guten fragen und die kritische prüfung.
Hohe Anerknnung
Grüße
task thomas wes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 56955
Url: https://administrator.de/forum/daten-aus-verschiedenen-excel-dateien-in-ein-neues-dokument-kopieren-und-sortieren-56955.html
Ausgedruckt am: 18.05.2025 um 11:05 Uhr
26 Kommentare
Neuester Kommentar
Hallo Thomas!
Hier im Forum weiterzumachen finde ich ohnehin besser ...
Nochmals als Kurzzusammenfassung:
Ein Ordner enthält (wird enthalten) Projektdateien mit gleichbleibender Struktur (Name, Anzahl und Inhalt der Tabellen). Aus insgesamt 9 der in den Dateien enthaltenen Tabellen sollen jeweils 100 verschiedene Kostenarten in "Tabelle4" der Exceldatei "Zusammenstellung" so zusammengefasst werden, dass neben den Feldern "Kostenart", "Partner", "Wann" und "Total" auch die Herkunft der Kosten (das Projekt) ersichtlich ist.
Meine Frage nach dem "Eingabefenster" bezog sich auf Deine oben dargestellte Idee
Daraus resultierend ist für mich weiterhin ist die Frage offen, ob die Lösung in der Hinsicht dynamisch sein soll, dass die bereits vorhandenen Zusammenfassungs-Daten beim Hinzufügen neuer Projekte tatsächlich zu ergänzen wären, oder ob zum gewünschten Stichtag die Zusammenfassung aus den dann aktuell im Verzeichnis liegenden Projektdateien neu erstellt werden sollte - damit entfiele auch das angedachte Löschen auszuscheidender Projekte.
Grüße
bastla
Hier im Forum weiterzumachen finde ich ohnehin besser ...
Nochmals als Kurzzusammenfassung:
Ein Ordner enthält (wird enthalten) Projektdateien mit gleichbleibender Struktur (Name, Anzahl und Inhalt der Tabellen). Aus insgesamt 9 der in den Dateien enthaltenen Tabellen sollen jeweils 100 verschiedene Kostenarten in "Tabelle4" der Exceldatei "Zusammenstellung" so zusammengefasst werden, dass neben den Feldern "Kostenart", "Partner", "Wann" und "Total" auch die Herkunft der Kosten (das Projekt) ersichtlich ist.
Meine Frage nach dem "Eingabefenster" bezog sich auf Deine oben dargestellte Idee
Wenn in der ZUsammenführung eine neue P-Kalkulation eingetragen wird, könnte sich eine Abfrage zum Speicherort öffnen und nach Auswahl der Datei Die Kostenpositionen in die "tabelle 4" der P-Zusammenführung kopieren und sortieren.
Daraus resultierend ist für mich weiterhin ist die Frage offen, ob die Lösung in der Hinsicht dynamisch sein soll, dass die bereits vorhandenen Zusammenfassungs-Daten beim Hinzufügen neuer Projekte tatsächlich zu ergänzen wären, oder ob zum gewünschten Stichtag die Zusammenfassung aus den dann aktuell im Verzeichnis liegenden Projektdateien neu erstellt werden sollte - damit entfiele auch das angedachte Löschen auszuscheidender Projekte.
Grüße
bastla
Hallo Thomas!
Leider bin ich momentan zeitlich etwas knapp, daher wird's ein wenig dauern - in der Zwischenzeit noch einige Fragen:
Grüße
bastla
... bleiben wir lieber beim identischen Pfad und unterschiedlicher Dateibezeichnung?
Insbesondere, wenn sichergestellt ist, dass nur Projektdateien im entsprechenden Ordner liegen, ist das OK.Leider bin ich momentan zeitlich etwas knapp, daher wird's ein wenig dauern - in der Zwischenzeit noch einige Fragen:
- Sollen eigentlich alle Kostenarten übernommen werden, oder nur jene, bei denen ein Wert <> 0 in "Total" aufscheint?
- Kann davon ausgegangen werden, dass die Tabellenstruktur unverändert bleibt (sodass also beispielsweise immer aus der Tabelle "Ausrüstung" die Spalten A, C, D und G übernommen werden), oder sollte die Auswahl der Spalten anhand der Überschriften in Zeile 3 erfolgen (etwa: Für "Total" wird die erste Spalte, deren Zelle in Zeile 3 den Text "total" groß oder klein geschrieben enthält, verwendet.)?
- Bleibt es dabei, dass der Dateiname als "Schlüsselbegriff" für das Projekt verwendet wird (da eben aus meiner Sicht keine Notwendigkeit zur Verlagerung in einzelne Verzeichnisse besteht, müssen die Namen ohnehin unterschiedlich sein)?
- Wie wird die Tabelle "Projektübersicht" verwendet/verwaltet?
Grüße
bastla
Hallo Thomas!
Als erstes Zwischenergebnis könnte ich Dir folgendes anbieten:
Speichere den Code in einem Modul der Zusammenfassungsdatei und starte nach den erforderlichen Anpassungen (siehe unten) das Makro "Test".
Kurze Erläuterungen:
Im ersten Teil werden einige Konstante (bitte überprüfen) und globale Variable festgelegt (inbes für die Auslagerung der "Init"-Routine).
Im Sub "Init" werden die aktuelle Datei sowie die Zieltabelle zwischengespeichert und es wird die nächste freie Zeile der Zieltabelle (basierend auf der ersten leeren Zelle der Spalte A) gesucht - Einträge sind in meiner Testversion ab Zeile 2 möglich, Du kannst diese Startzeile aber natürlich anpassen.
Die Routine "HoleAusMappe" erwartet die Übergabe einer Exceldatei mit vollständiger Pfadangabe (das erledigt dann für die Tests das Sub "Test"). Errorhandling (mit Ausnahme der Existenzprüfung für den übergebenen Dateinamen) findet derzeit noch nicht statt.
Für das Testen ermittle ich als "Kennung" des Projekts einfach den Dateinamen (ohne Pfad und ".xls").
Alle (derzeit 9 - siehe Konstante oben) Tabellen werden anhand ihres Namens in der Kalkulationsdatei aufgesucht und die im "Init"-Teil festgelegten (4 - siehe ebenfalls Konstante ) Bereiche in die entsprechenden Spalten der Zusammenfassungstabelle kopiert. In eine fünfte Spalte wird zusätzlich jeweils die Kennung eingetragen.
Nach dem Durchlaufen aller Tabellen wird die Kalkulationsdatei wieder geschlossen. An dieser Stelle hätte ich ein automatisches Speichern der Zusammenfassungsdatei vorgesehen, aber während der Testphase noch nicht implementiert.
Das "HoleAusMappe"-Unterprogramm soll in weiterer Folge für alle (woher auch die Informationen darüber stammen werden) Projektkalkulationsdateien verwendet werden. Für den Moment teste ich nur mit der (einen) im Sub "Test" eingetragenen Datei, was Du bitte auch tun mögest ...
Übrigens: Die Kostenarten für "Personal" und "Produktion" haben in der mir vorliegenden Fassung der Kalkulationsdatei noch jeweils die gleiche Abkürzung, und '"Ausrüstung" und "Sonstiges" detto ...
Grüße
bastla
Als erstes Zwischenergebnis könnte ich Dir folgendes anbieten:
Option Explicit
Const TabAnzahl As Integer = 9
Const BerAnzahl As Integer = 4
Const ZeilAnzahl As Integer = 100
Const ZusTab As String = "Tabelle4"
Dim Tabelle(TabAnzahl) As String
Dim Bereich(TabAnzahl, BerAnzahl) As String
Dim wbZ As Workbook, wsAuflist As Worksheet
Dim Zeile As Integer, Spalte As Integer
Sub Init()
Set wbZ = ActiveWorkbook
Set wsAuflist = wbZ.Worksheets(ZusTab)
'erste freie Zeile der Auflistung suchen
Zeile = 2
Do While wsAuflist.Cells(Zeile, 1) <> ""
Zeile = Zeile + 1
Loop
'Datenstruktur Kalkulationsdatei
Tabelle(1) = "Personal"
Bereich(1, 1) = "A5:A104" 'Kostenart
Bereich(1, 2) = "C5:C104" 'Wann
Bereich(1, 3) = "D5:D104" 'Partner
Bereich(1, 4) = "G5:G104" 'Total
Tabelle(2) = "Reise"
Bereich(2, 1) = "A5:A104" 'Kostenart
Bereich(2, 2) = "C5:C104" 'Wann
Bereich(2, 3) = "D5:D104" 'Partner
Bereich(2, 4) = "I5:I104" 'Total
Tabelle(3) = "Aufenthalt"
Bereich(3, 1) = "A5:A104" 'Kostenart
Bereich(3, 2) = "C5:C104" 'Wann
Bereich(3, 3) = "D5:D104" 'Partner
Bereich(3, 4) = "G5:G104" 'Total
Tabelle(4) = "Produktion"
Bereich(4, 1) = "A5:A104" 'Kostenart
Bereich(4, 2) = "C5:C104" 'Wann
Bereich(4, 3) = "D5:D104" 'Partner
Bereich(4, 4) = "G5:G104" 'Total
Tabelle(5) = "Veranstaltung"
Bereich(5, 1) = "A5:A104" 'Kostenart
Bereich(5, 2) = "C5:C104" 'Wann
Bereich(5, 3) = "D5:D104" 'Partner
Bereich(5, 4) = "G5:G104" 'Total
Tabelle(6) = "Ausrüstung"
Bereich(6, 1) = "A5:A104" 'Kostenart
Bereich(6, 2) = "C5:C104" 'Wann
Bereich(6, 3) = "D5:D104" 'Partner
Bereich(6, 4) = "G5:G104" 'Total
Tabelle(7) = "Untervertrag"
Bereich(7, 1) = "A5:A104" 'Kostenart
Bereich(7, 2) = "C5:C104" 'Wann
Bereich(7, 3) = "D5:D104" 'Partner
Bereich(7, 4) = "E5:E104" 'Total
Tabelle(8) = "Sonstiges"
Bereich(8, 1) = "A5:A104" 'Kostenart
Bereich(8, 2) = "C5:C104" 'Wann
Bereich(8, 3) = "D5:D104" 'Partner
Bereich(8, 4) = "G5:G104" 'Total
Tabelle(9) = "Evaluation"
Bereich(9, 1) = "A5:A104" 'Kostenart
Bereich(9, 2) = "C5:C104" 'Wann
Bereich(9, 3) = "D5:D104" 'Partner
Bereich(9, 4) = "E5:E104" 'Total
End Sub
Sub HoleAusMappe(Mappe As String) 'ev auch Kennung übergeben
Dim fso As Object, wbKalk As Workbook, Kennung As String
Dim i As Integer, j As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(Mappe) Then
MsgBox "Datei " & Mappe & " konnte nicht gefunden werden!"
Else
Init
Kennung = Mid(Mappe, InStrRev(Mappe, "\") + 1) 'Dateinamen isolieren
Kennung = Left(Kennung, InStrRev(Kennung, ".") - 1) 'Dateityp entfernen
Workbooks.Open Mappe
Set wbKalk = ActiveWorkbook
'Alle Tabellen einlesen
For i = 1 To TabAnzahl
Spalte = 1
For j = 1 To BerAnzahl
wbKalk.Worksheets(Tabelle(i)).Range(Bereich(i, j)).Copy
wbZ.Activate
wsAuflist.Activate
Cells(Zeile, Spalte).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Spalte = Spalte + 1
Next 'j
'Kennung eintragen
For j = 0 To ZeilAnzahl - 1
Cells(Zeile + j, Spalte) = Kennung
Next 'j
Zeile = Zeile + ZeilAnzahl
Next 'i
Cells(Zeile, 1).Select
wbKalk.Saved = True
wbKalk.Close
End If
End Sub
Sub Test()
HoleAusMappe ("D:\Test\P-Kalkulation.xls")
End Sub
Kurze Erläuterungen:
Im ersten Teil werden einige Konstante (bitte überprüfen) und globale Variable festgelegt (inbes für die Auslagerung der "Init"-Routine).
Im Sub "Init" werden die aktuelle Datei sowie die Zieltabelle zwischengespeichert und es wird die nächste freie Zeile der Zieltabelle (basierend auf der ersten leeren Zelle der Spalte A) gesucht - Einträge sind in meiner Testversion ab Zeile 2 möglich, Du kannst diese Startzeile aber natürlich anpassen.
Die Routine "HoleAusMappe" erwartet die Übergabe einer Exceldatei mit vollständiger Pfadangabe (das erledigt dann für die Tests das Sub "Test"). Errorhandling (mit Ausnahme der Existenzprüfung für den übergebenen Dateinamen) findet derzeit noch nicht statt.
Für das Testen ermittle ich als "Kennung" des Projekts einfach den Dateinamen (ohne Pfad und ".xls").
Alle (derzeit 9 - siehe Konstante oben) Tabellen werden anhand ihres Namens in der Kalkulationsdatei aufgesucht und die im "Init"-Teil festgelegten (4 - siehe ebenfalls Konstante ) Bereiche in die entsprechenden Spalten der Zusammenfassungstabelle kopiert. In eine fünfte Spalte wird zusätzlich jeweils die Kennung eingetragen.
Nach dem Durchlaufen aller Tabellen wird die Kalkulationsdatei wieder geschlossen. An dieser Stelle hätte ich ein automatisches Speichern der Zusammenfassungsdatei vorgesehen, aber während der Testphase noch nicht implementiert.
Das "HoleAusMappe"-Unterprogramm soll in weiterer Folge für alle (woher auch die Informationen darüber stammen werden) Projektkalkulationsdateien verwendet werden. Für den Moment teste ich nur mit der (einen) im Sub "Test" eingetragenen Datei, was Du bitte auch tun mögest ...
Übrigens: Die Kostenarten für "Personal" und "Produktion" haben in der mir vorliegenden Fassung der Kalkulationsdatei noch jeweils die gleiche Abkürzung, und '"Ausrüstung" und "Sonstiges" detto ...
Grüße
bastla
Hallo Thomas!
Bitte keine unproduktive Eile ...
Der Code ist gar nicht so lang, ich habe nur versucht, ihn etwas allgemeiner (und damit flexibler) anzulegen - und ein Großteil besteht ja nur aus der Definition der Tabellen(bereiche).
Andererseits: There's more to come - allerdings erst nach entsprechender Erörterung ...
Grüße
bastla
Bitte keine unproduktive Eile ...
Der Code ist gar nicht so lang, ich habe nur versucht, ihn etwas allgemeiner (und damit flexibler) anzulegen - und ein Großteil besteht ja nur aus der Definition der Tabellen(bereiche).
Andererseits: There's more to come - allerdings erst nach entsprechender Erörterung ...
Grüße
bastla
Hallo Thomas!
Vorweg noch eine zweite Testvariante (der ich persönlich eigentlich mehr abgewinnen kann) - hier werden nur Kostenarten übernommen, für die in zumindest einer der Spalten "Wann" und "Partner" ein Inhalt steht oder für die der Betrag von "Total" nicht 0 ist:
Im Prinzip gilt das bei der oberen Variante Gesagte: In ein Modul kopieren, Pfad im "Test"-Makro anpassen und dieses starten.
Die Bereiche sind nur noch mit Spaltenbuchstaben bzw der ersten Datenzeile vorgegeben - von dieser Zeile ausgehend werden alle Zeilen mit einer eingetragenen Kostenart bis zur ersten leeren Zelle in der Kostenarten-Spalte der jeweiligen Kalkulationstabelle berücksichtigt.
Grüße
bastla
Vorweg noch eine zweite Testvariante (der ich persönlich eigentlich mehr abgewinnen kann) - hier werden nur Kostenarten übernommen, für die in zumindest einer der Spalten "Wann" und "Partner" ein Inhalt steht oder für die der Betrag von "Total" nicht 0 ist:
Option Explicit
Const TabAnzahl As Integer = 9 'Anzahl der zu übernehmenden Tabellen in der Quelldatei
Const BerAnzahl As Integer = 4 'Anzahl der zu übernehmenden Spalten in der Quelltabelle
Const ZusTab As String = "Tabelle4" 'Name der Zieltabelle
Const StartSpalte As Integer = 1 'erste Datenspalte der Zieltabelle
Dim Tabelle(TabAnzahl) As String
Dim Bereich(TabAnzahl, BerAnzahl) As String
Dim wbZ As Workbook, wsAuflist As Worksheet
Dim Zeile As Integer, Spalte As Integer
Sub Init()
Set wbZ = ActiveWorkbook
Set wsAuflist = wbZ.Worksheets(ZusTab)
'erste freie Zeile der Auflistung suchen
Zeile = 2
Do While wsAuflist.Cells(Zeile, 1) <> ""
Zeile = Zeile + 1
Loop
'Datenstruktur Kalkulationsdatei
'Spalte für "Total" als Letzte angeben!
Tabelle(1) = "Personal"
Bereich(1, 0) = "5" 'erste Datenzeile
Bereich(1, 1) = "A" 'Kostenart
Bereich(1, 2) = "C" 'Wann
Bereich(1, 3) = "D" 'Partner
Bereich(1, 4) = "G" 'Total
Tabelle(2) = "Reise"
Bereich(2, 0) = "5" 'erste Datenzeile
Bereich(2, 1) = "A" 'Kostenart
Bereich(2, 2) = "C" 'Wann
Bereich(2, 3) = "D" 'Partner
Bereich(2, 4) = "I" 'Total
Tabelle(3) = "Aufenthalt"
Bereich(3, 0) = "5" 'erste Datenzeile
Bereich(3, 1) = "A" 'Kostenart
Bereich(3, 2) = "C" 'Wann
Bereich(3, 3) = "D" 'Partner
Bereich(3, 4) = "G" 'Total
Tabelle(4) = "Produktion"
Bereich(4, 0) = "5" 'erste Datenzeile
Bereich(4, 1) = "A" 'Kostenart
Bereich(4, 2) = "C" 'Wann
Bereich(4, 3) = "D" 'Partner
Bereich(4, 4) = "G" 'Total
Tabelle(5) = "Veranstaltung"
Bereich(5, 0) = "5" 'erste Datenzeile
Bereich(5, 1) = "A" 'Kostenart
Bereich(5, 2) = "C" 'Wann
Bereich(5, 3) = "D" 'Partner
Bereich(5, 4) = "G" 'Total
Tabelle(6) = "Ausrüstung"
Bereich(6, 0) = "5" 'erste Datenzeile
Bereich(6, 1) = "A" 'Kostenart
Bereich(6, 2) = "C" 'Wann
Bereich(6, 3) = "D" 'Partner
Bereich(6, 4) = "G" 'Total
Tabelle(7) = "Untervertrag"
Bereich(7, 0) = "5" 'erste Datenzeile
Bereich(7, 1) = "A" 'Kostenart
Bereich(7, 2) = "C" 'Wann
Bereich(7, 3) = "D" 'Partner
Bereich(7, 4) = "E" 'Total
Tabelle(8) = "Sonstiges"
Bereich(8, 0) = "5" 'erste Datenzeile
Bereich(8, 1) = "A" 'Kostenart
Bereich(8, 2) = "C" 'Wann
Bereich(8, 3) = "D" 'Partner
Bereich(8, 4) = "G" 'Total
Tabelle(9) = "Evaluation"
Bereich(9, 0) = "5" 'erste Datenzeile
Bereich(9, 1) = "A" 'Kostenart
Bereich(9, 2) = "C" 'Wann
Bereich(9, 3) = "D" 'Partner
Bereich(9, 4) = "E" 'Total
End Sub
Sub HoleAusMappe(Mappe As String) 'ev auch Kennung übergeben
Dim fso As Object, wbKalk As Workbook, Kennung As String
Dim i As Integer, j As Integer
Dim QZeile As Integer, Uebertragen As Boolean
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(Mappe) Then
MsgBox "Datei " & Mappe & " konnte nicht gefunden werden!"
Else
Init
Kennung = Mid(Mappe, InStrRev(Mappe, "\") + 1) 'Dateinamen isolieren
Kennung = Left(Kennung, InStrRev(Kennung, ".") - 1) 'Dateityp entfernen
Workbooks.Open Mappe 'ev mit fixem Pfad
Set wbKalk = ActiveWorkbook
wbZ.Activate
wsAuflist.Activate
'Alle Tabellen einlesen
For i = 1 To TabAnzahl
QZeile = CInt(Bereich(i, 0))
Do While wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, 1)).Value <> ""
'Sind für diese Kostenart Werte zu übertragen?
Uebertragen = False
For j = 2 To BerAnzahl - 1 'außer für "Total" auf "leer" überprüfen
'Ein einziger Eintrag genügt ...
If wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).Value <> "" Then
Uebertragen = True
Exit For
End If
Next 'j
'Total überprüfen
If wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).Value <> 0 Then Uebertragen = True
If Uebertragen Then
'Kostenart übertragen
Spalte = StartSpalte
For j = 1 To BerAnzahl
Cells(Zeile, Spalte).Value = _
wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).Value
Cells(Zeile, Spalte).NumberFormat = _
wbKalk.Worksheets(Tabelle(i)).Cells(QZeile, Bereich(i, j)).NumberFormat
Spalte = Spalte + 1
Next 'j
'Kennung eintragen
Cells(Zeile, Spalte) = Kennung
Zeile = Zeile + 1
End If
QZeile = QZeile + 1
Loop
Next 'i
Cells(Zeile, 1).Select
wbKalk.Saved = True
wbKalk.Close
End If
End Sub
Sub Test()
HoleAusMappe ("D:\Test\P-Kalkulation.xls")
End Sub
Die Bereiche sind nur noch mit Spaltenbuchstaben bzw der ersten Datenzeile vorgegeben - von dieser Zeile ausgehend werden alle Zeilen mit einer eingetragenen Kostenart bis zur ersten leeren Zelle in der Kostenarten-Spalte der jeweiligen Kalkulationstabelle berücksichtigt.
Grüße
bastla
Hallo Thomas!
Zuletzt gingen ja die Überlegungen in Richtung "Übernahme aus der Projektübersichts-Tabelle" (auch die "Projekt-Kennung" könnte dann von dort ausgelesen und nicht - so wie derzeit - aus dem Dateinamen abgeleitet werden), aber es wäre natürlich auch möglich, die Dateinamen aus dem "Inhaltsverzeichnis" des Datenordners zu beziehen und einfach "alle Vorhandenen" zu übernehmen. Besonders in letzterem Falle müsste daran gedacht werden, "Doppelgleisigkeiten" zu vermeiden, indem etwa vor der Übernahme einfach alle Datenzeilen aus der "Tabelle4" (dafür findest Du sicher noch einen aussagekräftigeren Namen
) gelöscht werden.
Außerdem hattest Du daran gedacht, eine Sortierung der übernommenen Daten durchzuführen (vor allem bei der Variante 1, also der Komplettübernahme aller 800+ Kostenarten, sicherlich ein Thema).
Grüße
bastla
... ich werd jetzt noch einfügen dass alle Daten aus einer Quelle eingelesen werden ...
Das war der Kernpunkt der ausstehenden "Erweiterungen" - die eigentliche Steuerung des Einlesens.Zuletzt gingen ja die Überlegungen in Richtung "Übernahme aus der Projektübersichts-Tabelle" (auch die "Projekt-Kennung" könnte dann von dort ausgelesen und nicht - so wie derzeit - aus dem Dateinamen abgeleitet werden), aber es wäre natürlich auch möglich, die Dateinamen aus dem "Inhaltsverzeichnis" des Datenordners zu beziehen und einfach "alle Vorhandenen" zu übernehmen. Besonders in letzterem Falle müsste daran gedacht werden, "Doppelgleisigkeiten" zu vermeiden, indem etwa vor der Übernahme einfach alle Datenzeilen aus der "Tabelle4" (dafür findest Du sicher noch einen aussagekräftigeren Namen
Außerdem hattest Du daran gedacht, eine Sortierung der übernommenen Daten durchzuführen (vor allem bei der Variante 1, also der Komplettübernahme aller 800+ Kostenarten, sicherlich ein Thema).
Grüße
bastla
Hallo Thomas!
Na dann machen wir aus dem "Sub Test" einfach so etwas:
Optimierungen (wie etwa nur einmaliges Zuweisen der Tabellenbeschreibungen) können wir ja im Fall des Falles noch nachziehen ...
Grüße
bastla
P.S.: Danke für die guten Wünsche, aber mein Gesundheitszustand könnte noch etwas besser sein ...
Na dann machen wir aus dem "Sub Test" einfach so etwas:
Sub StarteZusammenfassung()
Const sSourcePath As String = "D:\Daten"
Dim fso as Object, oFile as Object
Set fso = CreateObject("Scripting.FileSystemObject")
'
'Hier vorweg die Tabelle "Projektkosten" löschen
'
For Each oFile In fso.GetFolder(sSourcePath).Files
If LCase(Right(oFile.Name, 4)) = ".xls" Then 'nur Excel-Mappen bearbeiten
HoleAusMappe(oFile.Path)
End If
Next
End Sub
Grüße
bastla
P.S.: Danke für die guten Wünsche, aber mein Gesundheitszustand könnte noch etwas besser sein ...
Hallo Thomas!
Damit sollten dann auch mehr als nur die Daten von "Testlauf.xls" als Ergebnis vorzufinden sein ...
Grüße
bastla
was meinst du mit dem Kommentar: "'Hier vorweg die Tabelle "Projektkosten" löschen"
Genau das, was Du vermutet hast - allerdings darf das nur einmal, vor dem Übernehmen der einzelnen Projektdateien, passieren und nicht im "Sub Init" (dieses wird bei jeder zu übernehmenden Datei augerufen) - deshalb der Hinweis darauf bzw auf die richtige Position im Code.Damit sollten dann auch mehr als nur die Daten von "Testlauf.xls" als Ergebnis vorzufinden sein ...
Grüße
bastla