diwaffm
Goto Top

Wie in Excel bedingte Summe über mehrere Tabellenblätter hinweg?

Hi Leute,

ich habe hier eine Excel-Datei mit mehreren Tabellenblättern - für jeden Kunden eines sowie ein (geplantes) Summenblatt.

In den Kundenblättern gibt es eine Spalte mit dem Zahlungsziel und der Summe.
Nun würden wir gerne auf dem Summenblatt den Namen des Kunden, das Datum des Zahlungsziels und die Summe auflisten, wenn ein Zahlungsziel gegeben ist - und zwar für alle Kunden...

Notfalls könnte man die einzelnen Blätter "fest verdrahtet" ansprechen - das halte ich aber für wenig elegant - und könnte problematisch werden, wenn eim Kunde hinzukommt oder gestrichen wird.
Etwas eleganter, wäre wohl der Weg über eine Hilfstabelle, in der die Kunden und ihre Zuordnung zu den einzelnen Blättern gelistet sind.

Ideal wäre aber eine Lösung, die automatisch über alle Blätter läuft...
Doch da fällt mir nichts prikelndes zu ein...

ciao

dirk

Content-ID: 137232

Url: https://administrator.de/contentid/137232

Ausgedruckt am: 23.11.2024 um 15:11 Uhr

WhisperingDeath
WhisperingDeath 02.03.2010 um 18:26:23 Uhr
Goto Top
Ich würde ein eigenes Tabellenblatt anlegen, wo die Kunden mit einer Nummer versehen sind.
Danach würd ich in dem Summenblatt eine wenn funktion verschachtelt mit einer sverweis funktion machen.

Das sollte dann so aussehen:

wenn(A2<>0;sverweis(Suchkriterium;Matrix;Spaltenindex;FALSCH);"")

Je nach dem welchen Spaltenindex du eingibst kann zB Name, Summe usw. ausgegeben werden.

ich hoffe ich konnte dir helfen

lg
bastla
bastla 02.03.2010 um 18:32:14 Uhr
Goto Top
Hallo diwaffm!

Da Du mit Details ja eher sparsam warst, ein VBA-Beispiel mit angenommenen Werten und für den Fall, dass es für jeden Kunden mehrere Summen (jeweils eben mit oder ohne Zahlungsziel) gibt:
Sub ErstelleListe()
Summenblatt = "Gesamt"  
AbZeileSum = 2
AbSpalteSum = 1 'Spalte A  

AbZeileKunde = 2
SpalteZZ = 5 'Spalte E  
SpalteS = 7 'Spalte G  

'Alte Daten aus Summenblatt löschen  
Range(Cells(AbZeileSum, AbSpalteSum), Cells(AbZeileSum, AbSpalteSum).End(xlDown).End(xlToRight)).ClearContents
ZeileSum = AbZeileSum
For Each Blatt In Worksheets()
    If Blatt.Name <> Summenblatt Then
        ZeileKunde = AbZeileKunde
        Do While Blatt.Cells(ZeileKunde, SpalteS) <> ""  
            If Blatt.Cells(ZeileKunde, SpalteZZ) <> "" Then  
                With Worksheets(Summenblatt)
                    .Cells(ZeileSum, AbSpalteSum) = Blatt.Name
                    .Cells(ZeileSum, AbSpalteSum + 1) = Blatt.Cells(ZeileKunde, SpalteZZ)
                    .Cells(ZeileSum, AbSpalteSum + 2) = Blatt.Cells(ZeileKunde, SpalteS)
                End With
                ZeileSum = ZeileSum + 1
            End If
            ZeileKunde = ZeileKunde + 1
        Loop
    End If
Next
MsgBox "Fertig."  
End Sub
Außerdem bin ich davon ausgegangen, dass sich der Kundenname aus dem jeweiligen Tabellennamen ergibt.

Grüße
bastla
diwaffm
diwaffm 04.03.2010 um 09:49:55 Uhr
Goto Top
Merci bastla,

Dein Skript hat es (beinahe) getroffen...
Ich musste es lediglich dahingehend anpassen, dass es auch Zeilen in der Tabelle gibt, in denen die Rechnungssumme leer sein kann.

Die Schleife muss sich also an der Spalte mit der Rechnungsnummer und nicht der mit der Summe orientieren.
Sonst wird nach der ersten leeren Summe die Berechnung abgebrochen.
Aber: Wie sollst Du das ohne die original-Datei wissen.

Was mir gefehlt hat, war die Schleife "For Each Blatt in Worksheets()".

Danke

Dirk