Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SummeWenn mehrere Dateien

SummeWenn mehrere Dateien
15.12.2008 16:01:00
Christian
Hallo liebe Com,
ich habe folgendes Problem und gehört das ich hier gute Antworten und Hilfe bekommen kann.
So folgende Aufgabenstellung in meiner Firma:
Auswertung in Excel über 3 Grunddateien mit Daten und die 4 Datei erstelle ich mit Formeln wo ich eine Auswertung bekomme.
Datei 1 und 2 sind identisch vom Aufbau haben aber unterschiedliche Tabellenblätter mit verschiedenen Namen. Es sind Dateien von unseren Schweißanlagen wo die Arbeiter täglich ihre Daten eintragen ( Die versch. Tabellenblätter sind die versch. Schweißanlagen):
So siehts aus.
Auftrag. Abmessung.. viel zeug was ich nicht brauche.. dann Beginn Schweißung / Ende Schweißung / Schweißstunden pro Tag / Menge in m / Tagesmenge Auftrag
!!!Aufträge werden mehrmals eingeben!!!
So Datei 3 wird von unseren System generiert, hier steht folgendes drin.
Auftrag / Sollmenge / Sollzeit pro Meter
SO und die 4te Datei die ich erstelle enthält die Grunddaten der 3ten Datei (die vom System)
und anschließend Summewenn Formeln die von der Logik so aussehen sollen.
Summewenn in Datei 1 Blatt 1, Blatt 2 usw und/oder in Datei 2 Blatt 1 Blatt 2 usw in den Bereich B7:B3000 folgende Auftragsnummer steht dann rechne die Tagesmenge pro Auftrag (CI7:CI3000) zusammen
Wenn ich die Grundfromel habe dann kann ich das auch auf die anderen Sachen die ich brauche übertragen aber diese Grundformel macht mir verdammt zu schaffen... ich hab im internet auch nichts brauchbares weiter gefunden...
Wäre dankbar wenn mir schnell geholfen werden kann da ich die Auswertung am besten gestern brauche..
MFG Christian Arndt
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SummeWenn mehrere Dateien
15.12.2008 18:35:00
fcs
Hallo Christian,
mit Formeln ist eine elegante Lösung in deiner jetzigen Konstellation nach meiner Einschätzung nicht machbar.
Problem Nr. 1: SUMMEWENN funktioniert nicht über mehrere Tabellenblätter, wie z.B. SUMME
Problem Nr. 2: Die Funktion INDIREKT, die den Zugriff auf Daten wia Tabellenblattnamen ermöglichen würde funktioniert nicht bei geschlossenen Datein.
Eine saubere Lösung wäre, alle relevanten Daten per Makro aus den beiden Datendateien in ein separates Blatt deiner 4. Datei zu übertragen.
So sind deine Daten wieder einer "einfachen" SUMMEWENN-Berechnung zugänglich.
Theoretisch könnte man auch die Summenberechnung per Makro machen lassen. Ist aber relativ Langsam.
Hier kleines Beispiel mit Datei 1 2 und 4:
https://www.herber.de/bbs/user/57640.zip
Gruß
Franz
Anzeige
AW: SummeWenn mehrere Dateien
15.12.2008 19:08:46
Christian
vielen vielen dank das bringt mich schonmal ne ganze ecke weiter dieses makro!!!
ich muss jetzt nur noch rausfinden wie ichs abändern muss damits die richtigen daten zieht!!! aber super klappts auch wenn viele daten noch unbrauchbar sind, der weg stimmt aber.
Ne kleine beschreibung zu den makro wie ichs im detail ändern muss hast du nicht zufällig noch?
mfg christian a
Anzeige
AW: SummeWenn mehrere Dateien
16.12.2008 10:46:00
Christian
Hallo Franz!?
ich habe etwas rumprobiert. aber wie hast du die spaltennamen reingekriegt in das makro? oder wie kann ich das ändern?... und in meinen 2 grunddateien fangen die zeilen erst ab zeile 7 an, davor stehen überschriften und sonstige sachen. also das makro darf erst am zeile 7 kopieren und ich muss die überschriften irgendwo eintragen können... anonsten isses klasse!
gruß christian
Anzeige
AW: SummeWenn mehrere Dateien
16.12.2008 13:49:00
fcs
Hallo Christian,
die Zeilen sind im Code fest vorgegen. Damit es etwas einfacher anzupassen ist, hab ich entsprechende Konstanten deklariert, die du ggf. anpassen muss.
Die Überschriften der Spalten ändern sich ja nicht, die muss du "nur" einmalig im Zieltabellenblatt ("Daten") eintragen. Kannst du aber auch vom Makro machen lassen, wie in meinem Beispiel.
Im Makro werden die zu kopieren Spalten über die Nummern festgelegt, nicht über die Namen. Da ja der Aufbau deiner Quelldaten-Tabellen identisch ist, kann man das so machen.
Die Zeile im Code ist:
'Array mit Nummern der zu Kopierenden Spalten
arrSpalten = Array(1, 2, 7, 8, 9)
1 = A, 2 = B, 7 = G usw.
Hier muss du die Nummern entsprechend ergänzen, ändern.
Nachfolgend der angepasste Code, geänderte/neue Zeilen sind mit ### markiert.
Gruß
Franz

Sub DatenHolen()
Dim wksData As Worksheet
Dim strdatei As String, lngZeile As Long
Const StartZeile As Long = 2 'Zeile im Blatt Daten ab der Werte eingetragen werden sollen ### _
neu
On Error GoTo Fehler
Set wksData = Worksheets("Daten")
With wksData
'Spaltentitel eintragen          '###
.Cells(1, 1) = "AuftragsNr."          '###
.Cells(1, 2) = "Feld02"          '###
.Cells(1, 3) = "Feld07"          '###
.Cells(1, 4) = "Teilsumme"          '###
.Cells(1, 5) = "Feld08"          '###
.Cells(1, 6) = "Datei"          '###
.Cells(1, 7) = "Blatt"          '###
'Altdaten löschen
lngZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
If lngZeile >= StartZeile Then                                      '#####
.Range(.Rows(StartZeile), .Rows(lngZeile)).ClearContents          '#####
End If
End With
Application.Calculation = xlCalculationManual
'Startzeile für das Einfügen, nächste freie Zeile in Spalte 1 (A)
Application.ScreenUpdating = False
With wksData
lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With
strdatei = "C:\Lokale daten\Test\Daten\DateiNr1.xls"
Call AllesEinlesen(strdatei, wksData, lngZeile)
strdatei = "C:\Lokale daten\Test\Daten\DateiNr2.xls"
'Startzeile für das Einfügen, nächste freie Zeile in Spalte 1 (A)
With wksData
lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With
Call AllesEinlesen(strdatei, wksData, lngZeile)
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "Alles eingelesen!"
Fehler:
With Err
If Err  0 Then
MsgBox "Fehler-nr.: " & .Number & vbLf & .Description
End If
End With
End Sub
Function AllesEinlesen(strDateiname As String, wksZiel As Worksheet, _
ZeileStart As Long) As Boolean
Dim Bereich As Range, wksQuelle As Worksheet, wbQuelle As Workbook
Dim ZeileZiel As Long, lngZeile As Long, arrSpalten, intSpalte As Integer, intI As Integer
Const StartDaten = 7 '1. Zeile mit Daten in den Quelltabellenblättern '#####
On Error GoTo Fehler
AllesEinlesen = True
Set wbQuelle = Workbooks.Open(Filename:=strDateiname, ReadOnly:=True)
ZeileZiel = ZeileStart
'Array mit Nummern der zu Kopierenden Spalten
arrSpalten = Array(1, 2, 7, 8, 9)
For Each wksQuelle In wbQuelle.Worksheets
Select Case wksQuelle.Name
Case "TabelleXYZ"
'do nothing, diese Tabellen sollen nicht ausgewertet werden
Case Else
intSpalte = 0 'Spaltenzähler in Zieltabelle
With wksQuelle
'letzte ausgefüllte Zeile in Spalte 1 (A)
lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
If lngZeile >= StartDaten Then
For intI = LBound(arrSpalten) To UBound(arrSpalten)
'Zellen mit Daten Bereich zuweisen
Set Bereich = .Range(.Cells(StartDaten, arrSpalten(intI)), _
.Cells(lngZeile, arrSpalten(intI)))
With wksZiel
Bereich.Copy
intSpalte = intSpalte + 1
.Cells(ZeileZiel, intSpalte).PasteSpecial Paste:=xlPasteValues
End With
Next
'Quelldatei und Tabelle eintragen
With wksZiel
intSpalte = intSpalte + 1
.Range(.Cells(ZeileZiel, intSpalte), _
.Cells(ZeileZiel + Bereich.Rows.Count - 1, intSpalte)).Value _
= wbQuelle.Name                                     '###
intSpalte = intSpalte + 1
.Range(.Cells(ZeileZiel, intSpalte), _
.Cells(ZeileZiel + Bereich.Rows.Count - 1, intSpalte)).Value _
= wksQuelle.Name                                    '###
End With
ZeileZiel = ZeileZiel + Bereich.Rows.Count
End If
End With
End Select
Next
Fehler:
With Err
If Err  0 Then
AllesEinlesen = False
MsgBox "Fehler-nr.: " & .Number & vbLf & .Description
End If
End With
If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
End Function


Anzeige
AW: SummeWenn mehrere Dateien
16.12.2008 14:49:00
Christian
Danke klappt alles wunderbar!!! warst echt ne sehr große hilfe!.
MFG Christian
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

SummeWenn über mehrere Dateien in Excel


Schritt-für-Schritt-Anleitung

  1. Daten organisieren: Stelle sicher, dass Deine Excel-Dateien gut strukturiert sind. Die ersten beiden Dateien sollten identisch aufgebaut sein, wobei die verschiedenen Schweißanlagen in separaten Tabellenblättern aufgeführt sind. Die dritte Datei enthält die Sollwerte.

  2. Makro aktivieren: Öffne die Datei, in der Du die Auswertung erstellen möchtest. Drücke ALT + F11, um den VBA-Editor zu öffnen. Füge ein neues Modul hinzu und kopiere den bereitgestellten VBA-Code.

  3. VBA-Code anpassen: Ändere die Dateipfade in den strdatei Variablen im Makro, sodass sie auf die richtigen Dateien zeigen. Achte darauf, dass Du die StartDaten Konstante auf die Zeile anpasst, wo Deine Daten beginnen (in diesem Fall Zeile 7).

  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle das Makro aus und klicke auf „Ausführen“. Das Makro wird die relevanten Daten in Deine Zieldatei importieren.

  5. SUMMEWENN-Formel anwenden: Jetzt kannst Du die SUMMEWENN-Funktion in Deiner Zieldatei verwenden, um die Tagesmenge pro Auftrag zu berechnen. Die Formel könnte in etwa so aussehen:

    =SUMMEWENN(B7:B3000; "Auftragsnummer"; CI7:CI3000)

Häufige Fehler und Lösungen

  • Fehler: SUMMEWENN funktioniert nicht: Wenn Du versuchst, SUMMEWENN über mehrere Tabellenblätter anzuwenden, wird dies nicht funktionieren. In diesem Fall solltest Du ein Makro verwenden, um die Daten zusammenzuführen.

  • Fehler: INDIREKT funktioniert nicht bei geschlossenen Dateien: Wenn Du versuchst, die INDIREKT-Funktion zu nutzen, um auf Daten in geschlossenen Dateien zuzugreifen, wird dies fehlschlagen. Stelle sicher, dass alle relevanten Dateien geöffnet sind, oder benutze das Makro, um die Daten zu importieren.


Alternative Methoden

Eine Alternative zur Verwendung von SUMMEWENN über mehrere Dateien ist die Verwendung von Power Query. Power Query kann Daten aus verschiedenen Excel-Dateien abrufen und zusammenführen, was die Arbeit erheblich erleichtert. Hier sind die Schritte:

  1. Power Query öffnen: Gehe zu „Daten“ > „Daten abrufen“ > „Aus Datei“ und wähle Deine Excel-Dateien aus.
  2. Daten transformieren: Wähle die relevanten Tabellen und transformiere die Daten nach Bedarf, bevor Du sie in ein neues Blatt lädst.

Praktische Beispiele

Angenommen, Du hast zwei Dateien, „Daten_Schweißanlage1.xlsx“ und „Daten_Schweißanlage2.xlsx“. Beide Dateien enthalten die relevanten Daten in verschiedenen Blättern. Du kannst ein Makro erstellen, um diese Daten in eine neue Datei „Auswertung.xlsx“ zu importieren und dort die SUMMEWENN-Formel anzuwenden, um die Tagesmenge zu aggregieren.

Hier ist ein einfaches Beispiel, wie die Datenstruktur aussehen könnte:

Auftragsnummer Schweißstunden Tagesmenge
123 4 20
124 3 15

Die SUMMEWENN-Formel könnte dann so aussehen:

=SUMMEWENN(A:A; "123"; C:C)

Tipps für Profis

  • Verwende Named Ranges: Definiere benannte Bereiche für Deine Daten, um Deine Formeln übersichtlicher zu gestalten.
  • Arbeite mit Fehlerabfangroutinen im Makro: Integriere Fehlerbehandlung in Dein Makro, um sicherzustellen, dass unerwartete Fehler während des Imports behandelt werden.
  • Optimiere die Berechnungseinstellungen: Setze die Berechnung auf „manuell“, wenn Du große Datenmengen verarbeitest, um die Performance zu verbessern.

FAQ: Häufige Fragen

1. Warum funktioniert meine SUMMEWENN-Formel nicht?
Die SUMMEWENN-Funktion funktioniert nicht über mehrere Tabellenblätter. Stelle sicher, dass Du die Daten in ein Blatt importierst, bevor Du die Formel anwendest.

2. Wie kann ich das Makro anpassen?
Du kannst die Konstanten im Makro anpassen, um den Startpunkt für das Einlesen der Daten und die zu kopierenden Spalten zu ändern. Achte darauf, die Dateipfade korrekt zu setzen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige