Discussion:
Summe einer Spalte mehrerer Dateien
(zu alt für eine Antwort)
Domi
2009-09-04 20:39:01 UTC
Permalink
Hallo zusammen,

ich habe ein Verzeichnis mit einer Vielzahl von Excel-Dateien. Ich möchte
nun eine Datei erstellen, die aus allen Deteien in dem Verzeichnis die Summe
üer eine Spalte bildet und dann in Spalte B einträgt. In Spalte A soll der
Dateiname stehen.

Beispiel:

Dateien: 4711.xls | 4712.xls | 4713.xls ...

Ergebnis:
A1: 4711
A2: 4712
A3: 4713
B1: Summe über Spalte B in Datei 4711.xls
B2: Summe über Spalte B in Datei 4712.xls
B3: Summe über Spalte B in Datei 4713.xls

Wer kann hier helfen? Würde mir mindestens eine Nachtschicht ersparen ....

Besten Dank

Domi
Thomas Mangold
2009-09-05 04:35:10 UTC
Permalink
Post by Domi
Hallo zusammen,
ich habe ein Verzeichnis mit einer Vielzahl von Excel-Dateien. Ich möchte
nun eine Datei erstellen, die aus allen Deteien in dem Verzeichnis die Summe
üer eine Spalte bildet und dann in Spalte B einträgt. In Spalte A soll der
Dateiname stehen.
Dateien: 4711.xls | 4712.xls | 4713.xls ...
A1: 4711
A2: 4712
A3: 4713
B1: Summe über Spalte B in Datei 4711.xls
B2: Summe über Spalte B in Datei 4712.xls
B3: Summe über Spalte B in Datei 4713.xls
Wenn du die Dateinamen kennst, dann kannst du mit INDIREKT arbeiten:

A B
1 4711 =SUMME(INDIREKT("["&A1&".xls]Tabelle1!B:B"))
2 4712 =SUMME(INDIREKT("["&A2&".xls]Tabelle1!B:B"))
3
4

Dazu müssen glaube ich die Dateien (4711, 4712 .. ) geöffnet sein.
Domi
2009-09-05 06:52:01 UTC
Permalink
Hallo Thomas,

das ist ein erster Schritt - Danke. Aber genau das ist mein Problem, die
namen der Excel-Dateien ist nicht bekannt. Vielleict git es ja doch eine
Lösung? Irgendwie in die Richtung, dass das Procedere bei allen geöffneten
XLS Dateien durchführt wird?

Domi
Post by Thomas Mangold
Post by Domi
Hallo zusammen,
ich habe ein Verzeichnis mit einer Vielzahl von Excel-Dateien. Ich möchte
nun eine Datei erstellen, die aus allen Deteien in dem Verzeichnis die Summe
üer eine Spalte bildet und dann in Spalte B einträgt. In Spalte A soll der
Dateiname stehen.
Dateien: 4711.xls | 4712.xls | 4713.xls ...
A1: 4711
A2: 4712
A3: 4713
B1: Summe über Spalte B in Datei 4711.xls
B2: Summe über Spalte B in Datei 4712.xls
B3: Summe über Spalte B in Datei 4713.xls
A B
1 4711 =SUMME(INDIREKT("["&A1&".xls]Tabelle1!B:B"))
2 4712 =SUMME(INDIREKT("["&A2&".xls]Tabelle1!B:B"))
3
4
Dazu müssen glaube ich die Dateien (4711, 4712 .. ) geöffnet sein.
Andreas Killer
2009-09-05 09:03:23 UTC
Permalink
Post by Domi
Lösung? Irgendwie in die Richtung, dass das Procedere bei allen geöffneten
XLS Dateien durchführt wird?
Das läßt sich machen, denn die geöffneten Dateien lassen sich ermitteln.

Der angehängte Code muss in ein normales Modul, wie's geht steht hier:
http://www.online-excel.de/excel/singsel_vba.php?f=44#s2

Dann gibst Du in Deiner Tabelle in eine Zeile oder Spalte die
Matrixformel {=GetOpenWorkbookNames()} ein, z.B. von A1 bis A10.

Beim Öffnen und Schließen von Dateien wird die Formel jedoch ggf.
nicht automatisch berechnet, hier musst Du die Berechnung mit F9
"anschubsen".

Andreas.

Function GetOpenWorkbookNames() As Variant
'Liefert die Namen aller geöffneten, sichtbaren Dateien
Dim Result()
Dim WB As Workbook, I As Integer

'Immer berechnen wenn sich was ändert
Application.Volatile

'Zähle alle sichtbaren Fenster
For Each WB In Workbooks
If WB.Windows(1).Visible Then I = I + 1
Next
'Einen zusätzlichen Eintrag
I = I + 1

With Application.Caller
'Formel zeilenweise eingegeben?
If .Columns.Count > .Rows.Count Then
ReDim Result(1 To I)
I = 0
'Alle Mappen durchlaufen
For Each WB In Workbooks
If WB.Windows(1).Visible Then
'Wenn sichtbar, dann Namen eintragen
I = I + 1
Result(I) = WB.Name
End If
Next
'Letztes Feld ist immer ein Fehler
I = I + 1
Result(I) = CVErr(xlErrNA)
Else
'Dazu gleiche nur als Spalte
ReDim Result(1 To I, 1 To 1)
I = 0
For Each WB In Workbooks
If WB.Windows(1).Visible Then
I = I + 1
Result(I, 1) = WB.Name
End If
Next
I = I + 1
Result(I, 1) = CVErr(xlErrNA)
End If
End With
'Ergebnis ausgeben
GetOpenWorkbookNames = Result
End Function
Andreas Killer
2009-09-05 09:24:12 UTC
Permalink
Domi schrieb:

Ich muss nachbessern, der Code war nicht besondern schlau, das geht
besser.
Post by Domi
Lösung? Irgendwie in die Richtung, dass das Procedere bei allen geöffneten
XLS Dateien durchführt wird?
Das läßt sich machen, denn die geöffneten Dateien lassen sich ermitteln.

Der angehängte Code muss in ein normales Modul, wie's geht steht hier:
http://www.online-excel.de/excel/singsel_vba.php?f=44#s2

Dann gibst Du in Deiner Tabelle in eine Zeile oder Spalte die
Matrixformel {=GetOpenWorkbookNames()} ein, z.B. von A1 bis A10.

Beim Öffnen und Schließen von Dateien wird die Formel jedoch ggf.
nicht automatisch berechnet, hier musst Du die Berechnung mit F9
"anschubsen".

Andreas.


Function GetOpenWorkbookNames() As Variant
'Liefert die Namen aller geöffneten, sichtbaren Dateien
Dim Result()
Dim WB As Workbook, X As Long, Y As Long

'Immer berechnen wenn sich was ändert
Application.Volatile

With Application.Caller
'Eingabebereich als Ausgabe reservieren
ReDim Result(1 To .Rows.Count, 1 To .Columns.Count)

'Alles auf #NV setzen
For Y = 1 To .Rows.Count
For X = 1 To .Columns.Count
Result(Y, X) = CVErr(xlErrNA)
Next
Next

'Alle Mappen durchlaufen
X = 1
Y = 1
For Each WB In Workbooks
If WB.Windows(1).Visible Then
'Wenn sichtbar, dann Namen eintragen
Result(Y, X) = WB.Name
'Nächste Splate
X = X + 1
'Ende des Bereichs?
If X > .Columns.Count Then
'Nächste Zeile
X = 1
Y = Y + 1
'Ende des Bereichs?
If Y > .Rows.Count Then Exit For
End If
End If
Next
End With
'Ergebnis ausgeben
GetOpenWorkbookNames = Result
End Function
Domi
2009-09-10 06:07:01 UTC
Permalink
Hallo,

besten Dank für die qualifizierte Hilfe!

mfg
Domi
Post by Andreas Killer
Ich muss nachbessern, der Code war nicht besondern schlau, das geht
besser.
Post by Domi
Lösung? Irgendwie in die Richtung, dass das Procedere bei allen geöffneten
XLS Dateien durchführt wird?
Das läßt sich machen, denn die geöffneten Dateien lassen sich ermitteln.
http://www.online-excel.de/excel/singsel_vba.php?f=44#s2
Dann gibst Du in Deiner Tabelle in eine Zeile oder Spalte die
Matrixformel {=GetOpenWorkbookNames()} ein, z.B. von A1 bis A10.
Beim Öffnen und Schließen von Dateien wird die Formel jedoch ggf.
nicht automatisch berechnet, hier musst Du die Berechnung mit F9
"anschubsen".
Andreas.
Function GetOpenWorkbookNames() As Variant
'Liefert die Namen aller geöffneten, sichtbaren Dateien
Dim Result()
Dim WB As Workbook, X As Long, Y As Long
'Immer berechnen wenn sich was ändert
Application.Volatile
With Application.Caller
'Eingabebereich als Ausgabe reservieren
ReDim Result(1 To .Rows.Count, 1 To .Columns.Count)
'Alles auf #NV setzen
For Y = 1 To .Rows.Count
For X = 1 To .Columns.Count
Result(Y, X) = CVErr(xlErrNA)
Next
Next
'Alle Mappen durchlaufen
X = 1
Y = 1
For Each WB In Workbooks
If WB.Windows(1).Visible Then
'Wenn sichtbar, dann Namen eintragen
Result(Y, X) = WB.Name
'Nächste Splate
X = X + 1
'Ende des Bereichs?
If X > .Columns.Count Then
'Nächste Zeile
X = 1
Y = Y + 1
'Ende des Bereichs?
If Y > .Rows.Count Then Exit For
End If
End If
Next
End With
'Ergebnis ausgeben
GetOpenWorkbookNames = Result
End Function
Loading...