Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - dynamischer Code
#1
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!
Antworten Top
#2
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
Antworten Top
#3
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
Antworten Top
#4
(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.."
Antworten Top
#5
Dann Prüfe mal den Inhalt der beiden Variablen (Spaltenindex...).
Für weitere Hilfen wäre dann die Datei gut.

Gruß Elex
Antworten Top
#6
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))) 
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste