ich hätte mal wieder eine Fragestellung die sicherlich einfach ist wenn man die Lösung kennt...
Ich habe ein größeres Makro geschrieben, soweit funktioniert auch alles. Nur ein kleines Problem besteht:
Problemstellung: Im aktivierten Arbeitsblatt (gefühlt die Nach durchgearbeitet, was ist hierfür ein umgangssprachlicher Name? :/) soll nach bestimmten Formeln gesucht werden (bspw. =Wenn). In allen Zellen die eine solche Formel enthalten, sollen die Formeln durch Werte ersetzt werden.
Dem geübten Auge wird ggfs. auffallen das ich mir hier etwas zusammenkopiert habe weil mir die Syntax in diesem Falle etwas schwer fällt.
Ich habe es mal in eine separate Datei gepackt um es losgelöst vom restlichen Makro zu testen:
Private Sub CommandButton1_Click()
For Each rngCell In ActiveSheet.UsedRange If Left(rngCell.Formula, 3) = "=IF" Then ActiveCell.PasteSpecial Paste:=xlPasteValues End If Next End Sub
Wo liegen die Fehler?
P.s.: Rein vom Verständnis: Wenn ich das Makro so aufbaue, wie viele Zellen geht Excel bei der Prüfung dann durch? Nur die Zellen in denen auch ein Wert / Formel ist? Oder alle Zellen (was in die Millionen geht)
11.09.2023, 09:51 (Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2023, 09:56 von DIZA.)
(11.09.2023, 09:44)Ich habe es mal in eine separate Datei gepackt um es losgelöst vom restlichen Makro zu testen: schrieb: Private Sub CommandButton1_Click()
For Each rngCell In ActiveSheet.UsedRange If Left(rngCell.Formula, 3) = "=IF" Then ActiveCell.PasteSpecial Paste:=xlPasteValues End If Next End Sub
P.s.: Rein vom Verständnis: Wenn ich das Makro so aufbaue, wie viele Zellen geht Excel bei der Prüfung dann durch? Nur die Zellen in denen auch ein Wert / Formel ist? Oder alle Zellen (was in die Millionen geht)
Die Datei hättest du mal mitschicken sollen. So wie du es "ansprichst" durchläuft das Makro alle Zellen die in dem benutzten Bereich sind, wobei hier Vorsicht geboten ist, da der Bereich gerne deutlich größer sein kann als du ihn meinst zu sehen. Hier würde sich eine klare Abgrenzung anbieten/empfehlen. Dann fehlen noch einige Angaben. welche Formeln / und vor Allem was soll in den Formeln durch was ersetzt werden ?
Gruß Dirk --------------- - Wenn du nicht weißt, wo du hin willst, ist es egal, welchen Weg du einschlägst.
11.09.2023, 10:11 (Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2023, 10:14 von DIZA.)
oh oh, die Datei ist fehlerhaft. egal den Sinn dahinter konnte ich erkennen, jedoch ist ja immer noch nicht geklärt was du gegen was tauschen möchtest.
Private Sub CommandButton1_Click() With Columns("F:F") .Replace What:="=WENN(", Replacement:="=WENN(", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2 End With End Sub
Gruß Dirk --------------- - Wenn du nicht weißt, wo du hin willst, ist es egal, welchen Weg du einschlägst.
Mir geht es "einfach" darum: Such nach bestimmten Formeln (bspw. alle "Wenn"-Funktionen) in dem aktiven Arbeitsblatt und ersetz mir die Formeln durch feste Werte.
Eigentlich nicht so schwer, aber irgendwas stellt sich hier in meinem Kopf queer
Sub ersetzen() Dim Bereich As String, ges As String, ers As String, Zelle Bereich = "F4:F25" ' hier legst du den Bereich fest in dem getauscht werden soll / das sollte besten Falls durch letzte Spalte und letzte Zeile definiert werden ges = "=WENN" ' nach was suchst du ers = "Da war mal Wenn da" ' gegen was soll getauscht werden For Each Zelle In Range(Bereich) If InStr(Zelle.FormulaLocal, ges) > 0 Then Zelle.Value = ers End If Next End Sub
Gruß Dirk --------------- - Wenn du nicht weißt, wo du hin willst, ist es egal, welchen Weg du einschlägst.
Dim Zelle As Range Dim Bereich As Range Set Bereich = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas) For Each Zelle In Bereich If Zelle.FormulaLocal Like "=WENN(*" Then Zelle.Value = Zelle.Value End If Next Zelle
Hier werden alle Zellen mit Formeln untersucht. Wenn die Formel mit =WENN( beginnt, dann wird sie durch ihr Ergebnis ersetzt.
Zu deiner Frage, was du falsch machst: - wenn du mit .PasteSpecial etwas einfügen willst, dann musst du vorher etwas kopieren - wenn du ActiveCell verwendest, solltest du dafür sorgen, dass die gewünschte Zelle auch aktiv ist (NEIN! Tu das nicht, sondern verwende nicht ActiveCell, sondern in deinem Fall rngCell)
Korrekt (im Sinne von: es macht was es soll) würde dein Code so lauten:
Code:
For Each rngCell In ActiveSheet.UsedRange If Left(rngCell.Formula, 3) = "=IF" Then rngCell.Copy rngCell.PasteSpecial Paste:=xlPasteValues End If Next