Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
648to652
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
648to652
648to652
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

SummeWenn

SummeWenn
09.08.2005 13:35:49
Sören
Hallo leute,
problem!
ich möchte gemäß der SummeWenn-Funktion eine Summenbildung vornehmen, jedoch nur, wenn auch das kriterium im bereich vorhanden ist!
sprich bereich 1 soll durchsucht werden, ob AA vorhanden ist, wenn ja, dann summiere alle werte von AA und schreibe AA in A2 un die Summe AA in B2.
analog dazu, alle weiteren...
wenn jedoch nix da ist, soll unter Bereich Summe auch nix stehen.
wie kriegt man das am schlausten auf die kette?
gruß,
sören
upload hier:

Die Datei https://www.herber.de/bbs/user/25452.xls wurde aus Datenschutzgründen gelöscht

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SummeWenn
09.08.2005 13:45:41
IngGi
Hallo Sören,
für Zelle B2 deiner Datei z.B.:
=WENN(SUMMEWENN($D$1:$E$18;A2;$E$1:$E$18)=0;"";SUMMEWENN($D$1:$E$18;A2;$E$1:$E$18))
Gruß Ingolf
AW: SummeWenn
09.08.2005 14:00:24
Sören
hallo erich, hallo ingolf,
erstmal herzlichen dank für eure antworten. aber da habt ihr was missverstanden, bzw. ich hab mich wohl eher unklar ausgedrückt.
unter bereich 1 summe soll auch nur dann AA hingeschrieben werden, wenn AA in bereich 1 vorhanden ist. dieses gilt nicht nur für die summenbildung sondern auch für den Eintrag AA ansich. (in zelle A2)
wenn jetzt auch noch BB in Bereich 1 ist, dann soll in zelle A3 BB geschrieben werden sowie in B3 die Summe von BB.
ich glaub, das geht nur über vba.
gruß,
sören
Anzeige
AW: SummeWenn
09.08.2005 14:36:18
IngGi
Hallo Sören,
wenn ich dich richtig verstanden habe, müsste es so gehen:
In A2: =WENN(ZÄHLENWENN(D1:D18;"AA")>0;"AA";"")
In B2: =WENN(A2="AA";SUMMEWENN(D1:E18;"AA";E1:E18);"")
Passt das so?
Gruß Ingolf
AW: SummeWenn
09.08.2005 14:44:13
Sören
hi ingolf,
noch nicht ganz!
ich weiß nämlich vorher nicht, welche einträge vorhanden sind. sprich ob AA oder BB oder ZQ, TY, oder sonst was...
deswegen kann ich das in zelle A2 nicht so bestimmen.
gruß,
sören
AW: SummeWenn
09.08.2005 14:03:36
IngGi
Hallo Sören,
vergiss meine Lösung. Die von Erich ist die bessere. Wenn AA zwar vorhanden ist, aber mit dem Wert 0, bekommst du bei meiner Lösung 0, bei der Lösung von Erich bekommst du eine Leerzelle, was du wahrscheinlich auch so haben willst.
Gruß Ingolf
Anzeige
AW: SummeWenn
09.08.2005 14:09:07
Sören
hab ich gemerkt, hilft mir nur beides nicht weiter!
guckt nochmal auf meinen zweiten beitrag.
gruß,
sören
AW: SummeWenn
09.08.2005 16:00:50
Sören
hallo leute,
problem besteht nach wie vor:
unter bereich 1 summe soll auch nur dann AA hingeschrieben werden, wenn AA in bereich 1 vorhanden ist. dieses gilt nicht nur für die summenbildung sondern auch für den Eintrag AA ansich. (in zelle A2)
wenn jetzt auch noch BB in Bereich 1 ist, dann soll in zelle A3 BB geschrieben werden sowie in B3 die Summe von BB.
ich glaub, das geht nur über vba.
gruß,
sören
upload:

Die Datei https://www.herber.de/bbs/user/25452.xls wurde aus Datenschutzgründen gelöscht

Anzeige
AW: SummeWenn
09.08.2005 17:31:43
IngGi
Hallo Sören,
das geht definitiv nur mit VBA. Ich krieg das aber heute nicht mehr gebacken. Daher lass ich die Frage mal offen. Vielleicht hat ja jemand anderes Zeit und Lust. Ansonsten schau ich morgen nochmal danach.
Gruß Ingolf
AW: SummeWenn
09.08.2005 17:40:50
IngGi
'tschuldigung. Ich wollte die Frage doch offen lassen.
Gruß Ingolf
AW: SummeWenn
09.08.2005 17:42:42
Sören
hi ingolf,
alles klar.
wer hat also eine idee?
gruß,
sören
AW: SummeWenn
10.08.2005 11:55:58
IngGi
Hallo Sören,
ich habe mal etwas gebastelt. Das Makro ist jetzt natürlich auf die Beispieldatei zugeschnitten. Damit das auch in deiner Originaldatei läuft, müssen insbesondere folgende Voraussetzungen gegeben sein. Die Bereichsbezeichnung (Bereich 1 ...) muss in Spalte A stehen. Die zugehörigen Daten müssen auf der selben Zeile beginnen. Die Bezeichnungen "AA" usw. müssen in Spalte D und die dazugehörigen Werte dahinter in Spalte E stehen. Zwischen den Bereichen muss jeweils genau eine Leerzeile sein. Der erste Bereich muss "Bereich 1" heißen und die Namen der weiteren Bereiche müssen mit "Bereich" beginnen. In Spalte D darf nach der letzten Wertezeile für den letzten Bereich keine Eintragung mehr vorkommen. Liegt die eine oder andere dieser Voraussetzungen nicht vor, muss das Makro entsprechend angepasst werden.
https://www.herber.de/bbs/user/25489.xls
Gruß Ingolf
Anzeige
AW: SummeWenn
10.08.2005 12:33:18
Sören
hallo ingolf,
großartig! in deiner bsp-datei läufts ja wie geschmiert.
damit ich das jedoch anpassen kann, wäre es super, wenn du mir deinen code kommentieren könntest. hast du dafür noch zeit und lust?
wäre genial.
gruß,
sören
AW: SummeWenn
10.08.2005 14:09:57
IngGi
Hallo Sören,
hier nochmal das Makro mit Kommentaren. Viel Erfolg.

Sub Summen()
Dim BerKennung As Range         'Obere linke Zelle des aktuellen Bereiches
Dim FolgeBerKennung As Range    'Obere linke Zelle des nachfolgenden Bereiches
Dim BezZelle As Range           'Zelle in Spalte A, in die z.B. "AA" reingeschrieben wird
Dim SumZelle As Range           'Zelle in Spalte B, mit der zugehörigen Summe (siehe BezZelle)
Dim Zelle As Range              'Zelle in Spalte D, zum Prüfen, ob z.B. "AA" in Spalte A schon aufsummiert ist
Dim Summand As Range            'Zelle in Spalte D, zum Aufsummieren für Eintrag in Spalte B
Dim Ende As Byte                'Merker zum Beenden des Makros nach dem letzten Bereich
Dim Summe As Double             'Zwischenspeicher zum Aufsummieren der Einträge in Spalte E
'In Spalte A "Bereich 1" suchen und Zelle in Variable übergeben
Set BerKennung = Columns(1).Find(what:="Bereich 1", lookat:=xlWhole)
'In Spalte A nächste Zelle, die mit "Bereich" beginnt suchen und Zelle in Variable übergeben
Set FolgeBerKennung = Columns(1).Find(what:="Bereich", lookat:=xlPart)
Do 'Bereich für Bereich abarbeiten, bis letzter Bereich bearbeitet (Ende>1)
'Wenn beim letzten bearbeiteten Bereich in Spalte A keine weitere Zelle mit dem Eintrag "Bereich..."
'mehr gefunden wurde, kommt nun der letzte zu bearbeitende Bereich. In diesem Fall wurde beim
'letzten Schleifendurchgang die Variable Ende von 0 auf 1 erhöht und wird nun nochmal von 1 auf 2
'erhöht. Damit wird am Ende dieses Schleifendurchganges die Schleife verlassen und das Makro endet.
If Ende > 0 Then Ende = Ende + 1
'Im aktuellen Bereich (Zeile von BerKennung bis Zeile von FolgeBerKennung) in Spalte D alle Zellen prüfen...
For Each Zelle In Range(BerKennung.Offset(0, 3), FolgeBerKennung.Offset(-2, 3))
'... es wird geprüft, ob der Eintrag dieser Zelle in Spalte A bereits aufsummiert wurde. Falls nicht,
'wird dies jetzt gemacht.
If Range(BerKennung.Offset(1, 0), FolgeBerKennung.Offset(-2, 0)).Find(what:=Zelle) Is Nothing Then
'Zelle für nächste Bezeichnung in Spalte A bzw. Summe in Spalte B ermitteln
'Wenn die Zelle unterhalb BerKennung leer ist, kommt die nächste Bezeichnung dort hinein...
If BerKennung.Offset(1, 0) = "" Then
Set BezZelle = BerKennung.Offset(1, 0) 'Zelle in Variable übergeben
Else '...sonst kommt sie in die nächste freie Zelle unterhalb von BerKennung
Set BezZelle = BerKennung.End(xlDown).Offset(1, 0)
End If
'Zelle für nächste Summe (rechts neben BerZelle) ebenfalls in Variable übergeben
Set SumZelle = BezZelle.Offset(0, 1)
'Alle Einträge in Spalte E mit der passenden Bezeichnung in Spalte D (diejenige, welche in Spalte A
'als nächstes eingetragen werden soll) in der Variablen Summe aufsummieren.
For Each Summand In Range(BerKennung.Offset(0, 3), FolgeBerKennung.Offset(-2, 3))
If Summand = Zelle Then 'Wenn passender Eintrag in Spalte D...
Summe = Summe + Summand.Offset(0, 1) '...Wert in Spalte E in der Variablen Summe aufsummieren
End If
Next Summand 'und nächste Zelle
BezZelle = Zelle 'Bezeichnung aus Spalte D in Spalte A eintragen
SumZelle = Summe 'Zugehörige Summe aus der Variablen Summe in Spalte B eintragen
Summe = 0 'Variable Summe für nächste Summenbildung zurücksetzen
End If
Next Zelle 'nächste Zelle darauf prüfen, ob Eintrag in Spalte A bereits aufsummiert ist
'Jetzt ist der aktuelle Bereich fertig und die Bearbeitung des nächsten Bereiches muss vorbereitet werden.
'Die obere linke Zelle des folgenden Bereiches wird zur oberen linken Zelle des aktuellen Bereiches
Set BerKennung = FolgeBerKennung
'Die obere linke Zelle des folgenden Bereiches wird neu ermittelt
'Dazu wird zunächst in Spalte A die nächste Zelle gesucht, die mit "Bereich" beginnt
'Diese Zelle wird in die Variable FolgeBerKennung übergeben
Set FolgeBerKennung = Columns(1).Find(what:="Bereich", after:=FolgeBerKennung)
'Wurde als nächste Zelle, die mit "Bereich" beginnt die Zelle $A$1 gefunden, bedeutet dies,
'dass unterhalb des nächsten Bereiches kein weiterer Bereich mehr folgt (in diesem Fall beginnt
'die Suche wieder oben in Spalte A und es wird wieder der erste Bereich gefunden).
If FolgeBerKennung.Address = "$A$1" Then
'Wenn es keinen nachfolgenden Bereich mehr gibt, wird die Zelle FolgeBerKennung über den letzten
'Eintrag in Spalte D ermittelt und in die Variable FolgeBerKennung übergeben
Set FolgeBerKennung = Range("D65536").End(xlUp).Offset(2, -3)
'Jetzt noch den Merker für das Makroende nach Bearbeitung des nächsten Bereiches (=letzter Bereich)
'setzen.
Ende = Ende + 1
End If
Loop Until Ende > 1 'Wenn Merker gesetzt, Schleife verlassen und Makro beenden.
End Sub
Gruß Ingolf
Anzeige
total genial - danke!!!
10.08.2005 15:31:39
Sören
gruß,
sören
p.s. hat geklappt! wahnsinn
nicht mehr offen
10.08.2005 18:41:04
Sören
d

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige