Excel-Formel per VBA in eine Zelle schreiben?
Hallo,
ich habe eine Tabelle mit 1934 Zeilen und 6 Spalten mit diversen Werten. Am Ende dieser Tabelle möchte ich ein paar statistiche Auswertungen einfügen und habe ein Problem folgende Formel per VBA-Makro in eine Leerzeile einzufügen:
'=ZÄHLENWENNS(F2:F1934;"=0")+ZÄHLENWENNS(F2:F1934;"=1")
Schreibe ich diese Formel manuell in die Zelle, summiert sie was sie zählen soll!
Der Makro liefert mir einen Laufzeitfehler 1004 und ich weiß nicht warum...
FORM01A = FRST_F & ":" & LAST_F & ";""""=0"""""
FORM01B = FRST_F & ":" & LAST_F & ";""""=1"""""
FORM01 = "=ZÄHLENWENNS(" & FORM01A & ")" & "+ZÄHLENWENNS(" & FORM01B & ")"
Cells(neu, 1).EntireRow.Insert
Cells(neu, 1) = "Anzahl aktive MGL in " & xGMD
Cells(neu, 2) = FORM01
Ich vermute, dass es an den Hochkommata liegt. Hat jemand eine Idee?
Gruß jumo
5 Antworten
Hallo, anstatt die Formel in die Zelle zu schreiebn könntest du auch direkt das Ergebnis reinschreiben.
=ZÄHLENWENNS(F2:F1934;"=0")+ZÄHLENWENNS(F2:F1934;"=1")
Range("A1").Value = Worksheetfunction.Countifs(Worksheets("Tab1").Range("F2:F1934"),"=0")+Worksheetfunction.Countifs(Worksheets("Tab1").Range("F2:F1934"),"=1")
Vorteil. Excel muss nicht Immer wieder dieses Ergebnis rechnen=>Zeitersparnis.
Wenn die ähnliche Formel 1000 fach in dein Sheet schreibst wird es sehr langsam.
Hast Du Dir den String mal ausgeben lassen? Z.B. mit debug.print ins Direktfenster?
Die Formel musst Du der Eigenschaft Cells(neu.2).Formula zuweisen. Ich habe mal die Erfahrung gemacht, dass man zum Einfügen der Formel die englischen Bezeichnungen der Tabellenfunktionen verwenden muss. Es gibt zwar FormulaLocal, aber dass hat damals nicht ordentlich funktioniert.
Viel Erfolg
Hannes
Versuche es erstmal mit:
Cells(neu, 2).FormulaLocal = FORM01
Ansonsten hilft Dir vielleicht weiter, was ich mir hier zusammengeschrieben habe um Deinen Code auseinander nehmen zu können. DAS läuft.
Dim FORM01A As String, FORM01B As String, FORM01 As String
Dim neu As Long
neu = 3
Dim FRST_F As String, LAST_F As String
FRST_F = "E1"
LAST_F = "E10"
FORM01A = FRST_F & ":" & LAST_F & ";0"
Debug.Print FORM01A
FORM01B = FRST_F & ":" & LAST_F & ";1"
Debug.Print FORM01B
FORM01 = "=ZÄHLENWENNS(" & FORM01A & ")" & "+ZÄHLENWENNS(" & FORM01B & ")"
Debug.Print FORM01
Cells(neu, 1).EntireRow.Insert
Cells(neu, 1) = "Anzahl aktive MGL in " & xGMD
Cells(neu, 2).FormulaLocal = FORM01
Hallo Oubyi,
Super! Ich habe mich krampfhaft an die Hochkommata gehalten, da diese mir aus einem anderen Beispiel mit ZÄHLENWENNS vorgegeben wurden. Die sind auch irgendwann notwendig um anzuzeigen, dass nach einem 2. Hochkomma der String nicht zu Ende ist sondern das Hochkomma Teil des Strings ist...
Auch das Gleichheitszeichen (=) konnte man problemlos weglassen...
Speichere ich diese Formel (ZÄHLENWENNS) manuelle in einer Zelle, funktioniert sie ja mit "=" und Kochkommata?!?!?!
Was mich aber trotzdem irrritiert ist die Tatsache, dass man im Web Beiträge findet die "ZÄHLENWENNS" und solche, die "ZÄHLENWENN" beschreiben...
Nohmals herzlichen Dank und bleib gesund!
jumo
Gern geschehen 😊.
Dir auch alles Gute.
P.S.: Wenn Du auf eine Antwort reagierst, dann am besten als Kommentar zu dieser Antwort (wie bei Hannes) und nicht als eigene Antwort auf Deine Frage wie hier.
Auf den Kommentar bekommt der Antworter automatisch einen Hinweis, auf Deine Antwort nicht.
Wenn ich deine Frage richtig verstanden habe, schreibst du in Makro deutsche Formel? Versuchs mal, die englische "Variante". Nötigenfalls benutze die Makroaufzeichnung und adaptiere dann entsprechend