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

SUMMEWENN mit 2 Kriterien

SUMMEWENN mit 2 Kriterien
19.03.2006 15:25:04
Holger
Liebe Profis,
... auch Sonntags hat man (leider) Excel-Probleme!
Ist eine benutzerdefinierte Funktion der Standardfunktion SUMMEWENN mit zwei Kriterien möglich?!
Ich löse diese Aufgabe grad mit Array-Funktionen, bei 60.000 Zeilen mit Daten wird die Tabelle jedoch zu langsam.
Vielen Dank für Eure Unterstützung
Holger

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SUMMEWENN mit 2 Kriterien
19.03.2006 16:05:39
Reinhard
Hi Holger,
mal ein Ansatz:
Tabellenblattname: Tabelle1
A   B    C     D
1  1   0   100   205
2  2   1   101
3  3   0   102
4  4   1   103
5  5   0   104
6  1   0   105
7  1       106
8  1       107
9  4       108
10  5       109
Benutzte Formeln:
D1:  =SW(A1:A10;"=1";B1:B10;"=0";C1:C10)
Option Explicit
Function SW(ber1, krit1, ber2, krit2, bersumme)
Dim n
If ber1.Cells.Count <> ber2.Cells.Count Then GoTo ungleich
If ber1.Columns.Count > 1 Or ber2.Columns.Count > 1 Then GoTo ungleich
For n = 1 To ber1.Rows.Count
If Evaluate(ber1.Cells(n, 1) & krit1) = True And Evaluate(ber2.Cells(n, 1) & krit2) = True Then
SW = SW + bersumme.Cells(n, 1)
End If
Next n
Exit Function
ungleich:
SW = "Bereiche ungleich groß oder zuviele spalten"
End Function
</PRE>
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..

Anzeige
AW: SUMMEWENN mit 2 Kriterien
19.03.2006 16:21:30
Holger
Hallo Reinhard,
von Grundsatzt genau das, was ich suche! Es wäre aber noch besser, wenn die beiden Kriterien nicht in der Formel eingegeben werden müssen, sondern in jeweils einer Zelle hinterlegt werden können. So könnte ich die Funktion runterkopieren...!(gibt leider zeilenweise andere Kriterien)
Geht das?!?
Aber auch in dieser Form schon eine tolle Sache.
Viele Grüße und Dank
Holger
AW: SUMMEWENN mit 2 Kriterien
19.03.2006 16:33:21
Reinhard
Hi Holger,
ich habe fast fest damit gerechnet dass das kommt :-)
Mal schauen ob ich das hinkriege, bis dahin stelle ich die Frage auf noch offen.
Gruß
Reinhard
AW: SUMMEWENN mit 2 Kriterien
19.03.2006 16:51:48
Reinhard
Hi Holger,
mein Code ist besser als ich dachte :-)
Nach Durchlauf kannste ja die Formeln ganz rauswerfen mit Inhalte einfügen---Werte, wenn die Datei zu dick wird.
Tabellenblattname: Tabelle1
A   B    C     D
1  1   0   100   312
2  2   1   101
3  3   0   102
4  4   1   103
5  5   0   104
6  1   0   105
7  1   1   106
8  1   0   107
9  4       108
10  5       109
11
12
13
14
15  1   0
Benutzte Formeln:
D1:  =SW(A1:A10;"=A15";B1:B10;"=B15";C1:C10)
Tabelle eingefügt mit Reinhards Tabelleneinfüger Version 1.0 

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
Fast...
19.03.2006 17:06:43
Holger
Hallo Reinhard,
leider noch nicht ganz.
Hier mal eine Beispielmappe.

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

Ich würde die Funktion gerne "runterziehen" und dann sollten sich die Bezüge an die Zellen mit den Kriterien anpassen müssen!
Viele Grüße
Holger
noch Faster :-)
19.03.2006 18:20:05
Reinhard
Hi Holger,
Funktion klappt jetzt, aber hat noch kleinen Haken, nach dem runterkopieren erscheint überall der Wert der Ausgangszelle, k.A. warum, deshalb Frage noch offen.
Deshalb musst du dann noch alles in Spalte E markieren, dann das makro tt ablaufen lassen. Warum das Makro (siehe auskommentierten 2eiler) nicht automatisch selbst selektieren kann ist mr auch unklar.
Nachstehend ist die Tabelle auf die sich der ode bezieht gepostet.
Daatei: https://www.herber.de/bbs/user/32028.xls
Option Explicit
Function SW(ber1, ByVal krit1, ber2, ByVal krit2, bersumme)
Application.Volatile
Dim n
If ber1.Cells.Count <> ber2.Cells.Count Then GoTo ungleich
If ber1.Columns.Count > 1 Or ber2.Columns.Count > 1 Then GoTo ungleich
For n = 1 To ber1.Rows.Count
If Cells(n, 1) = krit1 And ber2.Cells(n, 1) = krit2 Then
SW = SW + bersumme.Cells(n, 1)
End If
Next n
Exit Function
ungleich:
SW = "Bereiche ungleich groß oder zuviele spalten"
End Function
Sub tt()
Dim Zelle As Range
'Range("E2:E" & Range("e65536").End(xlUp).Row).Select
'MsgBox Selection.Address
For Each Zelle In Selection
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Next Zelle
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Tabellenblattname: Tabelle1
A    B    C   D     E       F        G
1  1    10   2       Summe   Krit 1   Krit 2
2  2    20   4         490        1        2
3  3    30   6                    2        2
4  4    40   8                    3        6
5  1    50   2                    2        4
6  2    60   4
7  3    70   6
8  4    80   8
9  1    90   2
10  2   100   4
11  3   110   6
12  4   120   8
13  1   130   2
14  2   140   4
15  3   150   6
16  4   160   8
17  1   170   8
18  2   180   4
19  3   190   6
20  4   200   8
21  1   210   2
22  2   220   4
23  3   230   6
24  4   240   8
25  2   250   2
26  2   260   4
27  3   270   6
28  4   280   8
Benutzte Formeln:
E2:  =SW($A$1:$A$28;F2;$C$1:$C$28;G2;$B$1:$B$28)
Tabelle eingefügt mit Reinhards Tabelleneinfüger Version 1.0 

Anzeige
99,99%
19.03.2006 18:38:36
Holger
Hallo Reinhard,
is doch schon super!! (99,99%)
Ich habe festgestellt, dass man auch F9 drücken kann, wenn man die Formel runtergezogen hat, oder sich Werte im Bereich geändert haben. Da scheint das (kleine) Problem zu liegen: Das Makro erkennt ev. kein Ereignis?!?
Vielleicht schaffst Du noch die 100%...?:-))
Erstmal vielen Dank für Deine großen Bemühungen!
Gruß
Holger
Danke:-), noch offen o.w.T.
19.03.2006 18:40:00
Reinhard

Gruß Reinhard ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: 99,99%
19.03.2006 19:01:43
ransi
Hallo
Hab mich auch mal dran versucht.
Auch wenns schon gelöst ist:
Option Explicit
Public

Function sw(bereich As Range, suchspalte1 As Integer, Kriterium1, suchspalte2 As Integer, kriterium2, summeSpalte As Integer)
Dim container
Dim L As Long
container = bereich
For L = 1 To UBound(container)
If container(L, suchspalte1) = Kriterium1 And container(L, suchspalte2) = kriterium2 Then _
sw = sw + container(L, summeSpalte)
Next
End Function

Aufgerufen wird so:
Anzeige
AW: 99,99%
19.03.2006 19:27:54
Holger
Hallo Ransi,
wenn ich den Code über die Zwischenablage in ein Modul kopiere, ist der Part public rot und bei der Funktion in der Tabelle fehlt im Funktionassistenten der sechste Bereich (die Spalte, die kopiert werden soll)
was mache ich denn falsch??
Dank und Gruß
Holger
AW: 99,99%
19.03.2006 19:30:59
Reinhard
Hi Holger,
das ist weil ransi den pre-Tag nicht benutzt sondern Hans vertraut :-), Public gehört vor Function
Option Explicit
Public Function sw(bereich As Range, suchspalte1 As Integer, Kriterium1, suchspalte2 As Integer, kriterium2, summeSpalte As Integer)
Dim container
Dim L As Long
container = bereich
For L = 1 To UBound(container)
If container(L, suchspalte1) = Kriterium1 And container(L, suchspalte2) = kriterium2 Then _
sw = sw + container(L, summeSpalte)
Next
End Function

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
Ähm,Frage
19.03.2006 19:37:37
ransi
hallo
Ähm....
Ist mir fast peinlich, aber was ist pre-Tag?
Mein Wissen in Sachen HTML ist auf einer skala von 0 bis 10 irgendwo bei
0,0001.
ransi
AW: Ähm,Frage
19.03.2006 20:30:00
Reinhard
Hallo ransi,
da gibts doch die klasse Seite "selfhtml" zum online oder auch runterladen wenn man in html einsteigen will.
Schau mal in OffTopic nach dem Betreff "Dringend" da wird mit dem Tag marque rumgespielt um eine Laufschrift zu erzeugen, im Quellcode siehst du wie es gemacht wird, auch das mit den Fensterchen in Michas Beitrag.
Aber Hans hat hier im direkten Forum nur wenige Tags zugelassen, b und pre zumindest und dann noch einen um die Schriftgröße festzulegen, weiss grad nicht wie der heißt.
Mit b machst du die Schrift fett und pre behält die Formatierung/Einrückung und erlaubt auch die Benutzung von < und > deshalb benutze ich es immer.
Benutzung ist einfach, einfach <pre> vor den Text/Code/Formel und </pre> dahinter schreiben.
Ich habe mir das eingebunden in diesen Javasript der mir hier die Formulare ausfüllt.
Gruß
Reinhard
Anzeige
AW: Ähm,Frage
19.03.2006 21:18:58
ransi


Hallo Rheinhard
na das ist ja einfach...
Das ganze mal verfeinert, einem Button in der VBE zugewiesen und alles wird viel einfacher:
Option Explicit
Public Sub Schreibe_in_CLP()
    Dim mit_Pre As New DataObject
       With mit_Pre
        .GetFromClipboard
        .SetText "<pre>" & mit_Pre.GetText & "</pre>"
        .PutInClipboard
    End With
End Sub
jetzt nur noch hier einfügen.
Danke für die Erklärungen.
Je mehr ich da drüber nachdenke je mehr fällt mir dazu ein...
ransi

     Code eingefügt mit Syntaxhighlighter 4.0

Hab das jetzt mit dem synthaxhighlighter gemacht weil die pre's nicht angezeigt werden.
Klappt aber.
ransi
Anzeige
AW: Ähm,Frage
19.03.2006 22:42:45
Reinhard
Hallo ransi,
manches ist echt sinnvoll, z.B. um auf Winzigkeiten im Text besser hinzuweisen:
Frage: warum klappt =Summe("A1;A12") nicht?
Antwort: deshalb =Summe("A1:A12")
Natürlich sehe ich wirrbunte blinkende drehende Forumsseiten so gerne wie überladene xls-Dateien :-)
Alles in Maßen benutzen sonst erlaubt das Hans nicht mehr, wobei er Recht hat, stell dir vor alle würden son Scheiss machen :-)))
Gruß
Reinhard
AW: 99,99%
19.03.2006 19:39:50
Holger
Hallo Reinhard,
danke, der rote Eintrag Public ist weg!
Jetzt nur noch der Summenbereich in der Box des Assistenten und ich bin glücklich!:-)
Gruß
Holger
Anzeige
AW: 99,99%
19.03.2006 19:44:36
ransi
hallo
da gibts eine scrollbar.
;-)
ransi
Peinlich!
19.03.2006 19:45:32
Holger
Hallo Reinhard,
das Eingabefeld ist ja da, man muss nur die Bildlaufleiste benutzen...:-))
Kriegt man die 6 Eingabefelder nicht auf ein sichtbares Feld?
Holger
AW: Peinlich!
19.03.2006 20:00:56
ransi
Hallo Holger
Mit 7 bis 38 hochrasanten API-Funktion lässt sich das aussehen des Assistentn betimmt ändern. Mit Bordmitteln aber nicht
Aber nochmal zum Code:
2 geschaltete If's sind schneller als das "and".
Wird man bei Matrixen mit wenigen Zeilen kaum merken, aber wenn es über ganze Spalten geht macht sich das bemerkbar.
Public

Function sw(bereich As Range, suchspalte1 As Integer, Kriterium1, suchspalte2 As Integer, kriterium2, summeSpalte As Integer)
Dim container
Dim L As Long
container = bereich
For L = 1 To UBound(container)
If container(L, suchspalte1) = Kriterium1 Then
If container(L, suchspalte2) = kriterium2 Then _
sw = sw + container(L, summeSpalte)
End If
Next
End Function

ransi
Anzeige
1000 Dank
19.03.2006 20:10:18
Holger
Hallo Ransi,
vielen Dank. Dein Code funktioniert aber nur, wenn ich das Public ganz rausnehme. Setze ich es vor dem Begriff function, komm eine Fehlermeldung, wenn ich an der ursprünglichen Stelle belasse, meckert Excel auch...!
Scheint aber ganz ohne gut zu laufen, oder ist das Public sehr wichtig!?
Vielen Dank an Alle für die tolle und geduldige Unterstützung!
Gruß
Holger

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige