Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
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
Inhaltsverzeichnis

Formel per VBA übergeben, bzw. Berechnung in VBA

Formel per VBA übergeben, bzw. Berechnung in VBA
18.04.2018 12:25:00
Toni
ich bin am "Durchdrehen". ;-)
Ich habe eine Datei mit mehreren Blätter.
Es soll nachgesehen werden ob, ab A2, ein Begriff steht der in einen der anderen Blätter 'Suchbegriffe A' bzw. 'Suchbegriffe g' enthalten ist, falls ja soll eine entsprechende Summe, anhand der Einträge in den anderen Blätter, in 'Suchbegriffe' erstellt werden.
Ich wollte hierzu die Formel gerne in VBA berechnen habe aber gerade keine Ahnung wie ich das in VBA tatsächlich "umschreibe":
Dim EinfügeString As String
EinfügeString = "=WENN(LÄNGE(A2)=2;SUMMEWENN('Suchbegriffe G'!A:A;A2&" *";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&" *";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2;'Suchbegriffe G'!B:B) +SUMMEWENN('Suchbegriffe G'!A:A;A2&"-*";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&"/*";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"*/"&A2;'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;A2;'Suchbegriffe G'!B:B) +SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&"-*";'Suchbegriffe G'!B:B) _
;WENN(LÄNGE(A2)=1; SUMMEWENN('Suchbegriffe G'!A:A;A2&" *";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&" *";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;A2&"-*";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;A2;'Suchbegriffe G'!B:B) +SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2;'Suchbegriffe G'!B:B) _
;SUMMEWENN('Suchbegriffe G'!A:A; "*"&A2&"*";'Suchbegriffe G'!B:B))) _
+ WENN(LÄNGE(A2)=2;SUMMEWENN('Suchbegriffe A'!A:A;A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2;'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2&"-*";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&"/*";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"*/"&A2;'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2;'Suchbegriffe A'!B:B) +SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&"-*";'Suchbegriffe A'!B:B) _
;WENN(LÄNGE(A2)=1; SUMMEWENN('Suchbegriffe A'!A:A;A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2&"-*";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2;'Suchbegriffe A'!B:B) +SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2;'Suchbegriffe A'!B:B) _
;SUMMEWENN('Suchbegriffe A'!A:A; "*"&A2&"*";'Suchbegriffe A'!B:B)))"
Entsprechend wollte ich, der Einfachheit halber, das ganze als String in Zeile 2 übergeben und danach das ausführen:
Range("J2").Select
ActiveSheet.Paste
Selection.AutoFill Destination:=Range("J2:J924"), Type:=xlFillDefault
Range("J2:J924").Select
so dass alle Zeilen die Daten enthalten bei Spalte J die Formel eingetragen ist.
Erhalte aber einen Fehler bei "EinfügeString": Fehler beim Kombilieren, Erwartet "Ausdruck", markiert wird mir nach Klick auf OK in der Zweiten Zeile:
"+SUMMEWENN('Suchbegriffe" (das erste "Hochkammata").
Interessant ist, das es mir in der ersten Zeile nicht als Fehler ausgewiesen wird.
Setze ich jede Zeile in "" und am Ende jeder Zeile " &_" wird mir dann in der dritten Zeile hier "+SUMMEWENN('Suchbegriffe G'!A:A;A2&"-*" (beim "*") der Fehler angezeigt.
Ich hoffe das ich mich verständlich ausgedrückt habe.
Kann mir jemand meinen Fehler aufzeigen?
Danke
Toni

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Formel per VBA übergeben, bzw. Berechnung in VBA
18.04.2018 12:39:03
Rudi
Hallo,
du musst die " innerhalb des Strings verdoppeln.
"=WENN(LÄNGE(A2)=2;SUMMEWENN('Suchbegriffe G'!A:A;A2&""*"";......
Gruß
Rudi
AW: Formel per VBA übergeben, bzw. Berechnung in VBA
18.04.2018 13:05:38
Toni
Hallo Rudi,
besten dank.
Das hat schon mal geklappt.
Ich denke aber ich wäre heute besser im Bett geblieben ;-)
Ich habe nun das aufgenommen:
Sheets("Suchbegriffe").Range(LetzteSpalteBuchstabe & "2").Value = EinfügeString
Erhalte aber nun einen Laufzeitfehler 1004.
Wenn ich es so mache:
Sheets("Suchbegriffe").Range(LetzteSpalteBuchstabe & "2").Value = "EinfügeString"
wird mir, wie gedacht, netterweise das Wort EinfügeString in die Zelle eingefügt.
Anzeige
Formelfehler
18.04.2018 13:18:16
Rudi
Hallo,
dann passt was in der Formel nicht.
Ist ja auch kein Wunder bei dem Bandwurm.
Gruß
Rudi
AW: Formelfehler
18.04.2018 13:57:28
Toni
Hallo Rudi,
zum Glück habe ich den Bandwurm "Formeltechnisch" einwandfrei, sie funktioniert wenn sie in der Zelle steht... :-)
Ich möchte das ganze automatisieren da es recht aufwendig ist, ständig die Spalte und die Formeln manuell einzufügen.
AW: Formel per VBA übergeben, bzw. Berechnung in
18.04.2018 13:58:31
Daniel
Hi
wenn du auf diese Weise (.Value = Formel) eine Formel in eine Zelle schreiben willst, muss die Formel in amerikanischer Schreibweise, dh mit englischen Funktionsnamen (Wenn=If, SummeWenn=SumIf) und dem Komma als Parametertrennzeichen geschrieben sein.
wenn du die deutsche Schreibweise für die Formel verwenden willst, musst du .FormulaLocal = Formel verwenden.
allerdings könnte es sein, dass deine Formel zu lang ist, so dass sie mit VBA nicht in die Zelle geschrieben werden kann, das Limit liegt meines Wissens nach bei c.a. 1000 Zeichen.
Formeln in Zellen könnten zwar deutlich länger sein (ich meine c.a. 4000 Zeichen), aber VBA kann nur bis c.a. 1000 Zeichen übertragen.
der mögliche Workaround wäre hier folgender:
1. lasse den Formeltext nicht mit "=" beginnen, sondern mit "xxx=".
dann hast du keine Formel, sondern einen normalen Text
2. Ersezte dann mit der Menüfunktion ERSETZEN (in VBA Range().Replace) das "xxx=" durch "=".
Excel wird dann erneut prüfen, ob der Text eine Formel sein könnte und diesen dann entsprechen umwandeln. Da das jetzt Excel macht, darf die Formel auch länger sein als 1000 Zeichen.
aber auch hier gilt:
führst du das ERSETZEN von Hand aus, muss in der Zelle der deutsche Formeltext stehen.
führst du jedoch das REPLACE mit VBA aus, muss in der Zelle der amerikanische Formeltext stehen.
oder du kommst mit deinem Formeltext unter 1000 Zeichen.
wenn du die Tabellenblätter umbenennst (nur noch "A" und "G") und die englischen Funktionsnamen verwendest (SumIf statt SummeWenn) könnte es knapp reichen.
Die Blätter kannst du dann wieder umbenennen, sobald die Formel in der Zelle steht.
Gruß Daniel
Anzeige
AW: Formel per VBA übergeben, bzw. Berechnung in
18.04.2018 14:36:36
Toni
Hallo Daniel,
Hallo Rudi,
@Rudi: war in der Tat ein kleiner Fehler enthalten, was aber trotzdem nicht das Problem gelöst hat, da Daniel recht hat.
@Daniel: Danke für den Tipp mit dem "=". hier nämlich das Problem.
Habe nun die Formel angepasst und sie wird in die Zelle geschrieben.
Leider funktioniert aber das Ersetzen nicht:
Sheets("Suchbegriffe").Range("j2").Replace What:="x=", Replacement:="=", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Habe im per Makrorecorder aufgezeichnet.
Interessant: führe ich es in Excel per "Strg + H" aus, funktioniert das Ersetzen....
Was übersehe ich?
Gruß
Toni
Anzeige
du übersiehst ...
18.04.2018 14:50:20
Daniel
...den vorletzten Absatz meines Beitrags.
Gruß Daniel
AW: du übersiehst ...
18.04.2018 15:15:28
Toni
Hallo Daniel,
nun, wer lesen und mitdenken kann ist klar im Vorteil.... ;-)
Ich hatte alles außer "Länge" ins englische übernommen (inkl. ;=,).
Das nun auch auf Len geänsert und siehe da, nun klappt es, sogar ohne Umbenennen der Blätter.
Interessant, wusste ich bisher auch nicht, nach dem Ersetzen steht die Formel komplett auf Deutsch in der Zelle.
Also inkl. Übersetzung der englischen in die deutsche Schreibart.
Vielen Dank!!!
Toni
AW: du übersiehst ...
18.04.2018 15:31:23
Daniel
Hi
in Excel wird die Formel immer in der Landestypischen Schreibweise angezeigt.
Im Speicher steht aber einheitlich die amerikanische Schreibweise, damit deine Exceldatei auch lauffähig ist, wenn du sie mit einem anderssprachigen Excel öffnest.
beim Schreiben der Formel mit VBA kannst du auswählen, ob du die Formel in Landestypischer oder amerikanischer Schreibweise angeben, beides ist möglich, aber du musst es VBA mitteilen:
.Formula = "=amerikanische Formel" bzw .FormulaLocal = "=deutsche Formel"
wenn du .Value = "=..." verwendest, dann entspricht das dem .Formula = "=..."
das Umbenennen der Blätter ist noch ein Trick, wenn man den Formeltext unter die Maximal erlaubte Länge bringen will und viele lange Blattnamen in der Formel hat.
Da die Variante mit dem ERSETZEN das Ausschöpfen der tatsächlichen maximalen Formellängen erlaubt, ist dieser Trick hierbei nicht notwendig.
Gruß Daniel
Anzeige
AW: Formel per VBA übergeben, bzw. Berechnung in VBA
18.04.2018 12:40:18
Toni
Hier mein bisher erstellter Code komplett im Zusammenhang:
'In letzte Spalte, ab zweiter Zelle bis zum Ende die Zeilen Berechnen
LetzteSpalteBuchstabe = Buchstaben(LetzteSpalte)
Range(LetzteSpalteBuchstabe & "2").Select
Dim EinfügeString As String
'EinfügeString = "=WENN(LÄNGE(A2)=2;SUMMEWENN('Suchbegriffe G'!A:A;A2&" * ";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&" *";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2;'Suchbegriffe G'!B:B) +SUMMEWENN('Suchbegriffe G'!A:A;A2&"-*";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&"/*";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"*/"&A2;'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;A2;'Suchbegriffe G'!B:B) +SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&"-*";'Suchbegriffe G'!B:B) _
;WENN(LÄNGE(A2)=1; SUMMEWENN('Suchbegriffe G'!A:A;A2&" *";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2&" *";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;A2&"-*";'Suchbegriffe G'!B:B) _
+SUMMEWENN('Suchbegriffe G'!A:A;A2;'Suchbegriffe G'!B:B) +SUMMEWENN('Suchbegriffe G'!A:A;"* "&A2;'Suchbegriffe G'!B:B) _
;SUMMEWENN('Suchbegriffe G'!A:A; "*"&A2&"*";'Suchbegriffe G'!B:B))) _
+ WENN(LÄNGE(A2)=2;SUMMEWENN('Suchbegriffe A'!A:A;A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2;'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2&"-*";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&"/*";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"*/"&A2;'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2;'Suchbegriffe A'!B:B) +SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&"-*";'Suchbegriffe A'!B:B) _
;WENN(LÄNGE(A2)=1; SUMMEWENN('Suchbegriffe A'!A:A;A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2&" *";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2&"-*";'Suchbegriffe A'!B:B) _
+SUMMEWENN('Suchbegriffe A'!A:A;A2;'Suchbegriffe A'!B:B) +SUMMEWENN('Suchbegriffe A'!A:A;"* "&A2;'Suchbegriffe A'!B:B) _
;SUMMEWENN('Suchbegriffe A'!A:A; "*"&A2&"*";'Suchbegriffe A'!B:B)))"
Dim Textlänge
Dim i As Integer
Textlänge = 0
i = 2
Range("A" & i).Select
For i = 2 To LetzteZeile
Textlänge = Len(Cells(i, 1))
If Textlänge = 1 Then
MsgBox (1)
'Berechnung machen
'Berechnung einfügen
ElseIf Textlänge = 2 Then
MsgBox (2)
'Berechnung machen
'Berechnung einfügen
ElseIf Textlänge > 2 Then
MsgBox ("mehr als 2")
'Berechnung machen
'Berechnung einfügen
End If
Next i
'Filter auf die Zeile 1 setzen
Range("A1:" & LetzteSpalteBuchstabe & "1").Select
Application.CutCopyMode = False
Selection.AutoFilter
Anzeige
AW: Formel per VBA übergeben, bzw. Berechnung in VBA
18.04.2018 15:18:34
Toni
Noch mal mein Dank an Rudi und Daniel für die Unterstützung.
Somit ist meine Frage erst mal beantwortet und kann geschlossen werden.
(Oder muss ich etwas hierzu tun?)
Gruß
Toni

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige