Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Suchen und Ersetzen in Formel

VBA Suchen und Ersetzen in Formel
25.06.2024 09:36:38
Christian Nehring
Hallo zusammen,

ich verzweifle gerade an einer Suchen und Ersetzen Prozedur die eine Wenn-Formel durch einen bestimmten Text ersetzen soll.

In sämtlichen Zellen der Arbeitsmappe soll beispielsweise nach folgender Formel gesucht werden: =IF(Database="MISAlea";"SEGMENT2";VLOOKUP("SEGMENT2";Dim_Tbl;2;FALSE))

Diese Formel soll durch das Makro durch den Text "SEGMENT2" ersetzt werden.

Mit Suchen und Ersetzen aus der normalen Excel-Funktionalität funktioniert das einwandfrei. Aufgenommen als Makro hingegen nicht mehr.

Cells.Replace What:= _
"IF(Database=""MISAlea"";""SEGMENT2"";VLOOKUP(""SEGMENT2"";Dim_Tbl;2;FALSE))" _
, Replacement:="SEGMENT2", LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, _
FormulaVersion:=xlReplaceFormula2

Ich verstehe nicht warum das aufgenommene Makro nicht funktioniert.

Vielen Dank für eure Hilfe.

Gruß Christian
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Suchen und Ersetzen in Formel
25.06.2024 10:02:29
Oberschlumpf
Hi Christian,

a) du kannst in eine Zelle nicht einfach VBA-Code als FORMEL eintragen = das funktioniert sooo nich, weil Formeln sind Formeln und VBA-Code ist VBA-Code!

b) der von dir aufgezeichnete Code besteht aus fünf! Codezeilen; Zeilenumbruch immer das _ Zeichen am Ende der ersten 4 Codezeilen
Würde also VBA-Code als Formel doch funktionieren, dann müsstest du auch - den gesamten Code - als Formel eintragen und nicht nur die erste Codezeile

Was dagegen aber funktionieren kann:

1. Füg im VBE ein allgemeines Modul hinzu (wie DAS geht, wird im Inet erklärt)
2. Füg im Modul diesen Code ein:


Public Function fcSuchenErsetzen()

Cells.Replace What:= _
"IF(Database=""MISAlea"";""SEGMENT2"";VLOOKUP(""SEGMENT2"";Dim_Tbl;2;FALSE))" _
, Replacement:="SEGMENT2", LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, _
FormulaVersion:=xlReplaceFormula2

End Function

3. Trag nun im Tabellenblatt in deiner Wunschzelle (da, wo du vorher den Code als Formel haben wolltest) das hier als Formel ein:
=fcSuchenErsetzen()


Wenn alles funktioniert, sollte nun in deiner Wunschzelle ein Eregebnis erscheinen.

Hilfts?
Nein? Dann zeig uns bitte per Upload eine Excel-Bsp-Datei mit genügend Bsp-Datenzeilen in den richtigen Zeilen/Spalten, so dass dann auch wir deinen Code testen können.

Ciao
Thorsten
Anzeige
AW: VBA Suchen und Ersetzen in Formel
25.06.2024 10:21:28
daniel
Hi

dein Ersetzen lässt das "=" am Anfang stehen.
damit bekommst du "=Segment2" als Formel, was aber keine korrekte Formel ist (außer Segment2 wäre ein Name, der auf eine Zelle referenziert)

ersetze also auch das "=" am Anfang der Formel mit
... what:="=IF...", ...


oder, wenn es sich bei der Formel um einen Teil einer längeren Formel handelt, dann müsstet du den Text in Anführungszeichen setzen:
..., Replacement:="""SEGMENT2""",...


Gruß Daniel

Anzeige
AW: VBA Suchen und Ersetzen in Formel
25.06.2024 19:43:27
Piet
Hallo

ich bin mal einen anderen Weg gegangen, einen einfachen Suchlauf mit nachfolgendem Replace.
Es interessiert mich sehr, ob das Problem auf diese Art einfacher zu lösen ist???
Würde mich sehr freuen, Viel Spass beim testen.

mfg Piet

Sub Formel_inText_tauschen()

'Suche nach "IF(Database"
Set rFind = Cells.Find(What:="=IF(Database=", After:=[a1], LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If Not rFind Is Nothing Then
Adr1 = rFind.Address
Do 'weitere Suche nach "SEGMENT2"
If InStr(rFind.Formula, "SEGMENT2") Then
rFind.Value = "SEGMENT2"
Set rFind = Cells.FindNext(rFind)
End If
Loop Until rFind.Address = Adr1
End If
End Sub
Anzeige
AW: VBA Suchen und Ersetzen in Formel
26.06.2024 10:40:38
Christian Nehring
Hallo Piet,
vielen Dank. Ja, das funktioniert auch. Nach dem Ersetzen gibt es aber noch einen kleinen Laufzeitfehler bei "Loop Until rFind.Address = Adr1".
Ich habe probiert das Makro auf mein Folgeproblem von gestern um 19:07:09 anzuwenden. Jedoch bekomme ich es nicht hin.
Hast du hier noch einen Rat?
Gruß Christian
Anzeige
AW: VBA Suchen und Ersetzen in Formel
26.06.2024 10:50:15
daniel
Hi
probier mal das, diese Zeile sollte reichen.
Beachte die Einstellung lookat:=xlwhole in Verbindung mit den Jokern
Cells.Replace "*=IF(Database=*", "SEGMENT2", lookat:=xlwhole, matchcase:=false


Gruß Daniel
Ganz einfach: Korrekt umsetzen
25.06.2024 12:28:00
MCO
Mahlzeit!

Die Formel im englischen Format zu bearbeiten bzw. zu ersetzen ist schon richtig.
Jetzt musst du das nur konsequent bis zu ende machen:

Im englischen wird "," in den Formeln benutzt, nicht ";". Also lautet der VBA-Befehl:
    Cells.Replace what:= _

"=IF(Database=""MISAlea"",""SEGMENT2"",VLOOKUP(""SEGMENT2"",Dim_Tbl,2,FALSE))" _
, replacement:="SEGMENT2"


Gruß, MCO
Anzeige
AW: Ganz einfach: Korrekt umsetzen
25.06.2024 13:27:59
Christian Nehring
Perfekt. Super vielen Dank. Daran hat es gelegen. Es sind eben die Kleinigkeiten.
Gruß Christian
AW: Ganz einfach: Korrekt umsetzen
25.06.2024 19:07:09
Christian Nehring
Hallo MCO,

jetzt hatte ich mich doch zu früh gefreut. Das beschriebene Problem ist gelöst, allerdings gibt es einen ähnlichen abgewandelten Fall.
Im "gelösten" Beispiel wurde der komplette Zelleninhalt ersetzt. Wie müsste das Makro aussehen, wenn ein Teil der Excel-Formel geändert werden soll.

Die neue "Problemformel" in Excel sieht beispielsweise wie folgt aus:
=@AT.GET(Datenbank;WENN(Datenbank="MISAlea";"F_ACOUNT";SVERWEIS("F_ACOUNT";Dim_Tbl;2;FALSCH));Attribut_Tbl_Account;B37;Language_Account)

Folgende Formelbestandteile sind Namen: Datenbank, Dim_Tbl, Attribut_Tbl_Account, Language_Account.

Jetzt möchte ich in der Formel wieder die WENN-Bedingung ersetzen: WENN(Datenbank="MISAlea";"F_ACOUNT";SVERWEIS("F_ACOUNT";Dim_Tbl;2;FALSCH)) soll zu "F_ACOUNT" innerhalb der Formel werden.
Ergebnis sollte sein: =@AT.GET(Datenbank;"F_ACOUNT";Attribut_Tbl_Account;B37;Language_Account)

Das Problem ist, dass in der Gesamtformel auch ein variabler Bestandteil enthalten ist, der sich von Zelle zu Zelle und Arbeitsmappe zu Arbeitsmappe unterscheidet --> hier "B37"...

Wie bekomme ich es hin, dass das Makro nur die WENN-Bedingung innerhalb der Formel sucht und ersetzt? Ich habe wieder mit Aufzeichnen, Abändern auf Englisch, usw. herumprobiert. Bin letztlich aber nicht zum Erfolg gekommen.

Danke im Voraus.

Gruß Christian
Anzeige
AW: Ganz einfach: Korrekt umsetzen
26.06.2024 10:26:10
MCO
Moin,

das ist eingentlich nicht anders.


    Cells.Replace _

what:="IF(Database=""MISAlea"",""F_ACOUNT"",VLOOKUP(""F_ACOUNT"",Dim_Tbl,2,FALSE))", _
replacement:="F_ACOUNT", lookat:=xlPart


In Kombination mit der nachgestellten Änderung jeder Formelzelle von B37 in was auch immer:

Sub ersetzte()


Cells.Replace _
what:="IF(Database=""MISAlea"",""F_ACOUNT"",VLOOKUP(""F_ACOUNT"",Dim_Tbl,2,FALSE))", _
replacement:="F_ACOUNT", lookat:=xlPart

For Each cl In Cells.SpecialCells(xlCellTypeFormulas)

If InStr(cl.FormulaLocal, "B37") > 0 Then
neu_adress = cl.Offset(0, -2).Address
cl.Replace _
what:="B37", _
replacement:=neu_adress, lookat:=xlPart
End If
Next cl
End Sub

Gruß, MCO
Anzeige
AW: Ganz einfach: Korrekt umsetzen
26.06.2024 11:05:58
Christian Nehring
Perfekt. Erneut vielen Dank. Das ist genau das wonach ich gesucht habe.
Gruß Christian
AW: Ganz einfach: Korrekt umsetzen
26.06.2024 14:42:42
Piet
Hallo

die Lösung von Daniel ist um Klassen besser. Vielleicht hat ihn mein makro auf die Idee gebracht??
Ich korrigiere meinen Code trotzdem damit er funktioniert. - Der Wert in Adr1 wurde ja geändert!
Set rFind = Cells.FindNext(rFind)
If rFind Is Nothing Then Exit Do 'Aussprung weil Adr1 nicht mehr gefunden wird!
Loop Until rFind.Address = Adr1

mfg Piet
Anzeige
AW: VBA Suchen und Ersetzen in Formel
25.06.2024 10:34:27
Christian Nehring
Hallo Daniel,
Auch dir danke für die schnelle Rückmeldung.
Bzgl. "=" am Anfang der Formel die gesucht werden soll: Das hatte ich auch schon probiert und funktioniert leider auch nicht.
"Segment2" ist ein einfacher Text und kein Name. Ich habe die mehrfachen Anführungszeichen in den Code aufgenommen.
Letztlich funktioniert es immer noch nicht per VBA... über das normale Excel läuft das Suchen und Ersetzen :-/
Gruß Christian

P.S. in der Excel-Formel die z.B. in Zelle A1 steht "=WENN(Datenbank="MISAlea";"SEGMENT2";SVERWEIS("SEGMENT2";Dim_Tbl;2;FALSCH))" sind Datenbank und Dim_Tbl hinterlegte Namen. Ich möchte eigentlich nur nach dieser Formel in allen Arbeitsblättern suchen und diese durch einen Text (Segment2) ersetzen.
Anzeige
AW: VBA Suchen und Ersetzen in Formel
25.06.2024 10:19:59
Christian Nehring
Hallo Thorsten,
danke für die schnelle Rückmeldung. Ich habe den VBA Code nicht in einer Excel-Zelle eintragen wollen :-) Das habe ich selbstverständlich in einem Modul getan bzw. ich habe das Vorgehen über den Makro-Recorder aufgezeichnet.
Wenn ich das aufgezeichnete Makro starte, dann führt es leider nicht zum gewünschten Erfolg. Im Excel soll mittels VBA eine Wenn-Formel durch einen Text ersetzt werden.
Gruß Christian
Anzeige
AW: VBA Suchen und Ersetzen in Formel
25.06.2024 10:26:52
Oberschlumpf
Tja Christian,

und welchen Teil in meiner Antwort, beginnend mit "Nein? ...usw", hast du nich gelesen?

Zumindest ich könnte jetzt nur weiterraten, aber im Raten war ich noch nie gut.
Aber wer weiß, vllt hilft dir ja der Tipp von Daniel - ich bin neugierig auf deine Antwort an ihn.

Ciao
Thorsten
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige