Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
404to408
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
404to408
404to408
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Formel zu lang
arash
hi,
ich möchte die zellen aus 70 excel dateien in einer excel datei summieren. Z.B. steht in A1 der Datei in der alles smmiert wird:
=Summe(Datei1!A1+Datei2!A1+...+Datei70!A1)
Das Problem ist das die Formel dann zu lang wird (es kommt die Meldung Formel zu lang).
Kann mir jemand einen eleganten Lösungsvorschlag machen?
DANKE im Voraus

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
=SUMME(Datei1:Datei70!A1)
WF
KEIN Ausrufungszeichen bei 1
=summe('Datei1:Datei70'!a1)
IngoG
Hallo arasch?,
wenn Du mit Datei1-Datei70 Blätter in einer arbeitsmappe meinst, kannst Du,
wenn datei1 bis datei70 direkt hintereinanderstehen, die obige Formel benutzen.
Dann darfst Du allerdings die Reihenfolge der Tabellen nicht mehr ändern...
ansonsten sollte auch folgende Matrixformel funzen:
=summe(indirekt("Datei" & zeile(1:70) &"!a1"))
(Eingabe abschließen mit Strg-Shift-Enter)
wenn Du wirklich Dateien meinst, solltest Du über eine Macrofunktion nachdenken...
Gruß Ingo
PS eine Rückmeldung wäre nett...
AW: Formel zu lang
Oberschlumpf
Hi Arash
Leider hast Du folgendes nicht verraten:
1. Befinden sich alle XLS-Dateien im selben Ordner?
2. Haben die Dateien ähnliche Dateinamen, z Bsp Datei1...xls, Datei2....xls etc?
2. Wird der Wert aus A1 immer aus dem ersten Tabellenblatt entnommen?
Aus diesem Grund kann ich Dir nur ein Bsp zeigen, welches Du wohl dann an Deine Wünsche anpassen musst (wenn mein Vorschlag denn grundsätzlich funktioniert :-) )
Also, versuch es mal so.
Voraussetzung:
1. Alle XLS-Dateien müssen im gleichen Ordner sein


Sub Addition()
    Dim Datei As String
    Dim dbWert As Double
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    'Du musst anstelle von "C:\Beispiel" DEN Pfad angeben, in dem sich die Excel-Dateien befinden
    Datei = "C:\Beispiel\" & Dir("C:\Beispiel\*.xls")
    
        Do Until Datei = ""
            Workbooks.Open Datei
                If IsNumeric(Range("A1").Value) Then
                    dbWert = dbWert + Range("A1").Value
                End If
            Datei = ""
            ActiveWorkbook.Close savechanges:=False
            Datei = Dir
        Loop
    
    Range("A1").Value = dbWert
    
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
End Sub


In diesem VBA-Bsp wird nacheinander in Verzeichnis C:\Beispiel (Du musst Deinen Pfad anpassen!) jede Datei mit der Endung *.xls geöffnet.
Dann wird zum aktuellen Wert der Variablen dbWert der Inhalt von Zelle A1 addiert; Voraussetzung ist, dass in A1 ein numerischer Wert steht.
Danach wird die gerade geöffnete Datei ohne zu speichern wieder geschlossen, und die nächste XLS-Datei wird geöffnet.
Konnte ich helfen?
Ciao
Thorsten
Anzeige
AW: Formel zu lang
arash
Hi Thorsten,
die Dateien befinden sich alle im selben Ordner, haben aber nicht ähnliche Namen.
Die Zelle A1 wurde nur beispielhaft von mir genannt.
Es geht darum das 70 Dateien vorhanden sind und ich in einer Art Mastertabelle "jede Zelle" der 70 Dateien zusammmen addieren möchte.
D.h. wenn ich dein Makro verwenden würde müßte ich für jede Zelle (ca 4000 Zellen jeweils ein Makro programmieren).
Daher benötige ich auch weiterhin eure Hilfe
DANKE
AW: Formel zu lang
05.04.2004 13:41:17
Oberschlumpf
Hallo Arash
"Die Zelle A1 wurde nur beispielhaft von mir genannt.
Es geht darum das 70 Dateien vorhanden sind und ich in einer Art Mastertabelle "jede Zelle" der 70 Dateien zusammmen addieren möchte."
Schön, dass A1 nur ein Bsp ist, und dass Du anstelle dessen die Werte von 4000 Zellen addieren möchtest.
Und warum nennst Du dann NICHT den Bereich, in dem sich die Zellen befinden?
(z Bsp. A1:Z20 oder so)
Ich habe nun das Makro, welches Du ja schon kennst, umgeschrieben.
Nun wird jeder Wert aus den Zellen A1 - AN100 in eine Variable addiert
Deshalb A1 - AN100 weil
A1 - AN1 = 40 Spalten
und
A1 - A100 = 100 Zeilen
das ergibt
40 Spalten x 100 Zeilen = 4000 Zellen
Du musst also dann im Code den Bereich noch anpassen. Und natürlich auch den Pfad.
Hier nun endlich das Makro ;-)


Sub Addition()
    Dim Datei As String
    Dim dbWert As Double
    Dim Zelle As Range
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    'Du musst anstelle von "C:\Beispiel" DEN Pfad angeben, in dem sich die Excel-Dateien befinden
    Datei = "d:\personen\" & Dir("d:\personen\*.xls")
    
        Do Until Datei = ""
            Workbooks.Open Datei
                'den Bereich "A1:AN100" musst Du an den von Dir gewünschten Bereich anpassen
                For Each Zelle In Range("A1:AN100")
                    If IsNumeric(Zelle.Value) Then
                        dbWert = dbWert + Zelle.Value
                    End If
                Next
            Datei = ""
            ActiveWorkbook.Close savechanges:=False
            Datei = Dir
        Loop
    
    Range("A1").Value = dbWert
    
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
End Sub


Konnte ich denn diesmal helfen?
Ciao
Thorsten
Anzeige
AW: Formel zu lang
Reinhard
Hi arash,
probier mal den nachfolgenden Code. Die Datei müsste Master.xls heissen, wenn nicht musst du noch Namen ändern.
Gruß
Reinhard

Sub Addition()
Dim Datei As String
Application.ScreenUpdating = False
Application.EnableEvents = False
Datei = Dir("C:\Beispiel\*.xls")
Do Until Datei = ""
Workbooks.Open "C:\Beispiel\" & Datei
Range("A1:A4000").Copy
Windows("Master.xls").Activate
Range("a1").Activate
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows(Datei).Activate
Application.CutCopyMode = False
Workbooks(Datei).Close savechanges:=False
Datei = Dir
Loop
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Formel zu lang
arash
Hi Thorsten und Reinhard,
SORRY ich habe mich wohl falsch ausgedrückt.
Ich meine nicht daß die Summe von 4000 Zellen in A1 summiert werden soll.
In A1 sollen alle Werte der A1 Zellen der 70 Dateien summiert werden, aber da ganze nicht nur für A1 sondern für 4000 weitere Zellen, d.h. beispielhaft ausgedrückt sollen in A2 alle Werte der A2 Zellen der 70 Dateien summiert werden,in A3 alle Werte der A3 Zellen der 70 Dateien summiert werden usw..
DANKE !!!!
AW: Formel zu lang
05.04.2004 17:05:28
Oberschlumpf
Hi Arash
Da Du Dich noch immer weigerst, uns DEN Bereich zu verraten, in dem sich Deine 4000 Zellen befinden, bleibe ich bei dem Bereich A1:AN100
Mit dem weiter unten stehenden Code habe ich mit 5 unterschiedlichen Excel-Dateien im gleichen Verzeichnis dieses erreicht:
eine von 5 Ursprungsdateien mit gleichen Werten in A1 - E1:
Download des Tabellenkonverters                 Formeln in den Zellen als QuickNotiz
Von Oberschlumpf
Bild
A B C D E
1 10 20 30 40 50

die Ziel-Tabelle mit den summierten Werten in A1 - E1
Download des Tabellenkonverters                 Formeln in den Zellen als QuickNotiz
Von Oberschlumpf
Bild
A B C D E
1 50 100 150 200 250

und hier der Code:


Sub Addition()
    Dim Datei As String
    Dim dbWert As Double
    Dim Zelle As Range
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    'Du musst anstelle von "C:\Beispiel" DEN Pfad angeben, in dem sich die Excel-Dateien befinden
    Datei = "C:\Beispiel\" & Dir("C:\Beispiel\*.xls")
        Do Until Datei = ""
            Workbooks.Open Datei
                'den Bereich "A1:AN100" musst Du an den von Dir gewünschten Bereich anpassen
                For Each Zelle In Range("A1:AN100")
                    If IsNumeric(Zelle.Value) Then
                        Workbooks(DATEIINDEX).Sheets(BLATTINDEX).Range(Zelle.Address).Value = Workbooks(DATEIINDEX).Sheets(BLATTINDEX).Range(Zelle.Address).Value + Zelle.Value
                    End If
                Next
            Datei = ""
            ActiveWorkbook.Close savechanges:=False
            Datei = Dir
        Loop
        
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
End Sub


Wichtig!
Für DATEIINDEX musst Du den Index von DER Excel-Datei eintragen, welches Deine Zieltabelle ist. (Workbooks(1) ist die zuerst geöffnete Excel-Datei)
Für BLATTINDEX musst Du den Index DES Tabellenblattes erintragen, in dem die summierten Werte erscheinen sollen. (Sheets(1) ist das erste Tabellenblatt in einer Excel-Datei)
So, das wars....erst mal wieder :-)
Konnte ich denn diesmal helfen? :-)
Ciao
Thorsten
Anzeige

130 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige