| | | 3D-Druck: 7 Gründe für den Einsatz in der Medizin, ein Fachartikel
|
Autor
|
Thema: SumIfs mit Datumsproblem (1045 / mal gelesen)
|
Chriss7819 Mitglied
Beiträge: 3 Registriert: 02.09.2020
|
erstellt am: 02. Sep. 2020 16:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, in die Runde, seit kurzem setze ich mich mit VBA auseinander um meine umfangreiche Excelkalkulation schrittweise auf VBA umzustellen. Bei der SumIfs-Umsetzung gibt es Probleme, wenn zu den Sum-If-Kriterien ein Datumsbereich (Datum: TT.MM.TTTT) definiert wird. Ich vermute, es liegt an dem europäischen und amerikanischen Datumsformat. Allerdings wurden auch keine Ergebnisse in der Beispieldatei (siehe Anhang) geliefert, als die Formatierung auf "M/T/YYYY" umgestellt wurde. SumIf funktioniert bei mir leider nur, wenn ich den Datumswert als String (mit "") in die SumIfs-Formel eintrage. Sub der Beispieldatei: Sub SumIfs_mit_Einsatzdatum() Dim ws As Worksheet Set ws = Worksheets("Tabelle2") For i = 9 To 11 Step 2 ws.Cells(i, 12) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9: D20"), ws.Cells(i, 11), _ ws.Range("G9: G20"), ws.Cells(8, 12), _ ws.Range("C9: C20"), ">" & ws.Cells(i, 14), _ ws.Range("C9: C20"), "<" & ws.Cells(i + 1, 14)) ws.Cells(i, 13) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9: D20"), ws.Cells(i, 11), _ ws.Range("G9: G20"), ws.Cells(8, 13), _ ws.Range("C9: C20"), ">" & "01/01/2020", _ ws.Range("C9: C20"), "<" & "03/31/2020") Next i End Sub
Die Beispieldatei hat die Datenquelle und die Übersicht der Auswertung im selben Tabellenreiter. In meiner eigentlichen Datei ist die Datenquelle im Reiter "Daten" und die Auswertung in den Reiter "1" abgebildet. Das Thema "VBA - SUMIFS (Summewenns)-Problem" habe ich mir bereits durchgelesen - neben vielen anderen Foren und YouTube-Videos - aber einen Lösungsansatz konnte ich leider noch nicht finden. Über eure Unterstützung bin ich euch sehr dankbar. Beste Grüße, Chriss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chriss7819 Mitglied
Beiträge: 3 Registriert: 02.09.2020
|
erstellt am: 02. Sep. 2020 16:24 <-- editieren / zitieren --> Unities abgeben:
Eine kurze Ergänzung (sorry): Die Angabe des Datumsbereichs soll ">=" und "<=" lauten. Sub SumIfs_mit_Einsatzdatum() Dim ws As Worksheet Set ws = Worksheets("Tabelle2") For i = 9 To 11 Step 2 ws.Cells(i, 12) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9: D20"), ws.Cells(i, 11), _ ws.Range("G9: G20"), ws.Cells(8, 12), _ ws.Range("C9: C20"), "> =" & ws.Cells(i, 14), _ ws.Range("C9: C20"), "< =" & ws.Cells(i + 1, 14)) ws.Cells(i, 13) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9: D20"), ws.Cells(i, 11), _ ws.Range("G9: G20"), ws.Cells(8, 13), _ ws.Range("C9: C20"), ">=" & "01/01/2020", _ ws.Range("C9: C20"), "<=" & "03/31/2020") Next i End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 03. Sep. 2020 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für Chriss7819
Hallo Chriss, Willkommen im Forum Auf den ersten Blick sieht ja alles ganz vernünftig aus. Könntest Du eine Exceltabelle zum testen hochladen? Wäre dann einfacher den Fehler zu finden. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris7818 Mitglied
Beiträge: 1 Registriert: 03.09.2020
|
erstellt am: 03. Sep. 2020 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für Chriss7819
Hallo, Klaus, danke für das herzliche Willkommen auch für die rasche Durchsicht! Die Beispieldatei ist als Zip beigefügt. In der Originaldatei kommen zwei Reiter vor, weshalb es dann zwei Worksheets gibt. Beste Grüße, Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 03. Sep. 2020 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für Chriss7819
Hallo Chris, Habe eine Lösung gefunden, mußt halt sehen ob Du damit weiterkommst. Code:
Sub SumIfs_mit_Einsatzdatum() Dim ws As Worksheet Set ws = Worksheets("Tabelle2") ws.Activate Dim sd As Variant ' Startdatum Dim ed As Variant ' Endedatum For i = 9 To 11 Step 2 ' ws.Cells(i, 12) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ' ws.Range("D9:D20"), ws.Cells(i, 11), _ ' ws.Range("G9:G20"), ws.Cells(8, 12), _ ' ws.Range("C9:C20"), ">" & Chr(35) & ws.Cells(i, 14).Value & Chr(35), _ ' ws.Range("C9:C20"), "<" & Chr(35) & ws.Cells(i + 1, 14).Value & Chr(35)) ' ws.Cells(i, 13) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ' ws.Range("D9:D20"), ws.Cells(i, 11), _ ' ws.Range("G9:G20"), ws.Cells(8, 13), _ ' ws.Range("C9:C20"), ">" & "01/01/2020", _ ' ws.Range("C9:C20"), "<" & "03/31/2020") ' Übernahme der Werte, in den Feldern Value2 und Formula ' befinden sich die bereits umgerechneten Zeitangaben sd = ws.Cells(i, 14).Value2 ed = ws.Cells(i + 1, 14).Value2 ws.Cells(i, 12) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9:D20"), ws.Cells(i, 11), _ ws.Range("G9:G20"), ws.Cells(8, 12), _ ws.Range("C9:C20"), ">=" & sd, _ ws.Range("C9:C20"), "<=" & ed) ws.Cells(i, 13) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9:D20"), ws.Cells(i, 11), _ ws.Range("G9:G20"), ws.Cells(8, 13), _ ws.Range("C9:C20"), ">=" & sd, _ ws.Range("C9:C20"), "<=" & ed) Next i End Sub
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chriss7819 Mitglied
Beiträge: 3 Registriert: 02.09.2020
|
erstellt am: 04. Sep. 2020 11:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, Klaus, wow, super, DANKE! Es funktioniert! Besten Dank für den tollen und superschnellen Support! Die Ursache war, dass .value2 bei ws.Range("C9: C20"), ">=" bzw. ws.Range("C9: C20"), "<=" gefehlt hat. Für alle, die vor demselben Problem standen, hier das aktualisierte Beispiel und auch noch einmal als Anhang (siehe Tabelle 2a): Sub SumIfs_mit_Einsatzdatum() Dim ws As Worksheet Set ws = Worksheets("Tabelle2a") For i = 9 To 11 Step 2 ws.Cells(i, 12) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9: D20"), ws.Cells(i, 11), _ ws.Range("G9: G20"), ws.Cells(8, 12), _ ws.Range("C9: C20"), ">=" & ws.Cells(i, 14).Value2, _ ws.Range("C9: C20"), "<=" & ws.Cells(i + 1, 14).Value2) Next i For i = 9 To 11 Step 2 ws.Cells(i, 13) = WorksheetFunction.SumIfs(ws.Range("H9:H20"), _ ws.Range("D9: D20"), ws.Cells(i, 11), _ ws.Range("G9: G20"), ws.Cells(8, 13), _ ws.Range("C9: C20"), ">=" & ws.Cells(i, 14).Value2, _ ws.Range("C9: C20"), "<=" & ws.Cells(i + 1, 14).Value2) Next i End Sub
Wie kann ich das Thema schließen?
Herzliche Grüße und Danke! Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 04. Sep. 2020 12:10 <-- editieren / zitieren --> Unities abgeben: Nur für Chriss7819
Hallo Chriss, Thema schließen gibt es nicht aber man kann das Thema als erledigt markieren. Dazu beim Antworten über dem Textfenster bei Grafik für den Beitrag das grüne Häkchen auswählen (habe ich gerade gemacht). Als Threadersteller kann man das auch über die Unities machen, dazu beim Lösungsbeitrag oben, dort wo "Nur für Chriss7819" steht 10+ anklicken. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|