Registriert seit: 09.12.2021
Version(en): 365
25.02.2022, 08:52
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2022, 09:09 von Korain.)
Hallo zusammen, ich würde den Code gerne etwas dynamischer gestalten. Aktuell und funktionierend: Code: ws2.Cells(x, ersteSpalte).Value = Application.WorksheetFunction.SumIfs(ws.Range("X6:X20000"), ws.Range("R6:R20000"), SuchBegriffDE(I))
Da sich die Tabelle ständig ändern kann würde ich statt X gerne eine Variable nutzen. Habe bereits ein Hilfsblatt gemacht, wo ich die Spalte immer genau nachvollziehen kann. Ich lese bereits die Spalte als Integer in die Variablen Spaltenindex1, Spaltenindex2 ein.Code: ws2.Cells(x, ersteSpalte).Value = Application.WorksheetFunction.SumIfs(ws.Range(Cells(7, Spaltenindex1), Cells(20000, Spaltenindex1)), ws.Range(Cells(7, Spaltenindex2), Cells(20000, Spaltenindex2), SuchBegriffDE(I))
Leider bekomme ich einen Fehler bei der Range. Habe eigentlich schön öfter Range(Cells(),Cells()) ohne Probleme genutzt. Vielen Dank!
Registriert seit: 16.08.2017
Version(en): 2007 / 2010 / Web
25.02.2022, 13:00
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2022, 13:01 von Elex.)
Hi
Auf jeden Fall fehlt erst mal für die zweite Range eine ) Siehe rot. Ob das schon alles war wird sich zeigen.
ws2.Cells(x, ersteSpalte).Value = Application.WorksheetFunction.SumIfs(ws.Range(Cells(7, Spaltenindex1), Cells(20000, Spaltenindex1)), ws.Range(Cells(7, Spaltenindex2), Cells(20000, Spaltenindex2)), SuchBegriffDE(I))
Gruß Elex
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo Zitat:Code: ws.Range("X6:X20000"), ws.Range("R6:R20000")
Ich benutze in solchen Fällen gerne die Variablen Bereich1, Bereich2 und kann die vorher mit Resize festlegen Bereich1 = ws.Cells(z, Spaltenindex1).Resize(20000, 1) Resize vergrößert einen Rangebereich wie bei Cells(z,s) z=Zeile, S=Spalte Bereich2 = ws.Cells(z, Spaltenindex2).Resize(20000, 1) Tipp: Statt immer 20000 kann man auch in der Spalte 1+2 vorher die LastZell ermitteln! Lz1 = ws.Cells(Rows.Count, Spaltenindex1).End(xlUp).Row So sieht die verkürzte Variante aus, das gleiche für Bereich2 Bereich1 = ws.Cells(z, Spaltenindex1).Resize(Lz1, 1) mfg Gast 123
Registriert seit: 09.12.2021
Version(en): 365
(25.02.2022, 13:00)Elex schrieb: Hi
Auf jeden Fall fehlt erst mal für die zweite Range eine ) Siehe rot. Ob das schon alles war wird sich zeigen.
ws2.Cells(x, ersteSpalte).Value = Application.WorksheetFunction.SumIfs(ws.Range(Cells(7, Spaltenindex1), Cells(20000, Spaltenindex1)), ws.Range(Cells(7, Spaltenindex2), Cells(20000, Spaltenindex2)), SuchBegriffDE(I))
Gruß Elex Hallo Elex, danke für deine Antwort. Im Code selbst sind dort zwei geschlossene Klammern. Als ich den Variablennamen für CEF geändert habe, habe ich wohl leider ausversehen eine gelöscht. Leider ist es nicht das Problem. Wenn ich im Debug Modus über die Range hover gibt er mir aus: "Die Methode 'Range' für das Objekt '_Worksheet' ist.."
Registriert seit: 16.08.2017
Version(en): 2007 / 2010 / Web
Dann Prüfe mal den Inhalt der beiden Variablen (Spaltenindex...). Für weitere Hilfen wäre dann die Datei gut.
Gruß Elex
Registriert seit: 29.09.2015
Version(en): 2030,5
25.02.2022, 14:48
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2022, 14:48 von snb.)
Verwende VBA wenn du in VBA arbeitest. Verwende Excel Formel wenn du in Excel arbeitest. In VBA Code: Sub M_snb() sn = Cells(1).CurrentRegion a = 24 b = 18 For j = 1 To UBound(sn) If sn(j, a) = c00 Then y = y + sn(j, b) Next MsgBox y End Sub
In Excel in G1: 24 (Suchspalte) in H1: 18 (Summierspalte) In I1: 200 (Suchbegriff) In A1: PHP-Code: =SUMIF(INDEX($A$7:$Z$2000;0;G1);$I$1;INDEX($A$7:$Z$2000;0;$H$1))
oder PHP-Code: =SUMPRODUCT((INDEX($A$7:$Z$2000;0;$G$1)=$I$1)*(INDEX($A$7:$Z$2000;0;$H$1)))
|