Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1904to1908
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

VBA - Teil von Formeln löschen

VBA - Teil von Formeln löschen
31.10.2022 08:34:00
Formeln
Guten Morgen
Ich habe ein Excel mit mehreren Tabellenblättern und sehr vielen Formeln erstellt. Nun muss ich bei allen Formeln die Multiplikation mit der Zelle B1 durchführen (dort ist ein indirekter Bezug auf die Zelle A1 drin, wobei der Wert dieser Zelle nur 0 oder 1 sein kann). Dies habe ich mit folgendem Code (aufgezeichnet) realisiert:

'
Range("B1").Select
Selection.Copy
Columns("AG:FL").Select
Application.CommandBars("Selection").Visible = False
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
ActiveWindow.SmallScroll Down:=-108
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlMultiply, _
SkipBlanks:=True, Transpose:=False
Range("B3").Select
Application.CutCopyMode = False
End Sub
Dies hat zum gewünschten Ergebnis geführt. Nun muss ich mit einem weiteren Makro diese Multiplikation in allen Tabellenblättern löschen. Dabei habe ich folgendes aufgezeichnet:
1. Ctrl + F um "Suchen und Ersetzen" aufzurufen
2: Suchen: ~*indirekt(A1), Ersetzen: ""
3. Alle ersetzen
-> Diese Schritte haben eigentlich zum gewünschten Resultat geführt und folgender Code wurde aufgezeichnet:

    Cells.Replace What:="~*(INDIREKT(""a1""))", Replacement:="", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
Wenn ich aber dieses zweite Makro ausführe, passiert dann einfach nichts (auch keine Fehlermeldung). Kann mir jemand helfen, wie ich diese Multiplikation "*(Indirekt(A1)) mit einem Makro in allen Tabellenblättern löschen kann?
MFG
Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Teil von Formeln löschen
31.10.2022 09:41:00
Formeln
Hi
VBA schaut immer auf den amerikanischen Formeltext.
Dh du musst in deinem Replace die amerikanischen Schreibweisen verwenden, nicht die deutschen.
Führst du die Aktion von Hand aus, wendest du die deutschen an und die zeichnet der Recorder auf. Daher muss der aufgezeichnete Code überarbeitet werden, bevor du ihn ausführen.
Wie die Formel in amerikanisch aussieht, findest du raus in dem du eine Zelle marierst und ?Selection.Formula im Direktfenster ausführst.
Gruß Daniel
AW: VBA - Teil von Formeln löschen
31.10.2022 10:37:05
Formeln
Lieber Daniel
Besten Dank, jetzt hat es geklappt. Nun noch eine kurze Nachfolgefrage. Jedes mal wenn ich die Multiplikation in den Formeln ergänze, macht es mir logischerweise Klammern um den vorherigen Formel-Teil, welcher multipliziert wird. Spielt man nun diesen Prozess mehrmals durch, so häufen sich die Klammern und die Ursprungsformel sieht dann bspw. so aus:

=(((Summe(A1:B3))))

Gibt es eine Möglichkeit, wie ich bei meinem Makro ergänzen kann, das überflüssige Klammern wieder gelöscht werden?
LG
Peter
Anzeige
AW: VBA - Teil von Formeln löschen
31.10.2022 11:09:00
Formeln
Hi
Nicht so einfach, da ein Teil am Anfang und ein Teil am Ende entfernt werden muss und diese Teile azluch in der Mitte vorkommen können, wo sie nicht gelöscht werden dürfen.
Damit kannst du nachträglich überarbeiten, allerdings sollten keine Formeln vorkommen, die so aussehen: =(...)...(...)

Dim Zelle range
Dim f as String
For each Zelle in cells.specialcells(xlcelltypeformulas)
f  = Zelle.formula
Do while f like "=(*)"
f = "=" & mid(f, 3, Len(f) - 3)
Zelle.formula = f
Loop
Next
Gruß Daniel
AW: VBA - Teil von Formeln löschen
31.10.2022 13:14:27
Formeln
Super, werde es dann ausprobieren. Vielen Dank für Deine wertvolle Hilfe.
Anzeige
AW: VBA - Teil von Formeln löschen
31.10.2022 14:02:35
Formeln
Ich habe es getestet, aber gibt leider ein Problem damit.
Meine Formeln sehen aufgrund der Multiplikation und dem mehrfachen Ausführen des Makros dann jeweils so aus "=(((Summe(A1:B3)*Summe(B4:B6))))"
Eigentlich müsste die Korrektur folgendes machen:
1. Bei jeder Excel-Formel müsste geschaut werden, wie viele öffnende Klammern direkt nach dem "=" Zeichen stehen.
2. Die Anzahl der öffnenden Klammer müssten mit 1 subtrahiert werden und das gäbe den Wert der zu entfernenden Klammern direkt nach dem "=" Zeichen und gleichzeitig auch am Schluss der Formel (ganz rechts)
In diesem Beispiel oben würde dann die Formel wieder reduziert auf "=(Summe(A1:B3)*Summe(B4:B6))
Ich bin leider nicht fähig, solche Codes zu schreiben. Aber kannst Du hier allenfalls den notwendigen Code dazu schreiben?
LG
Peter
Anzeige
AW: VBA - Teil von Formeln löschen
31.10.2022 15:29:32
Formeln
Hi
Wenn eine äußere Klammer stehen bleiben soll, teste mal
Do while f Like "=((*))"
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige