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

Suchen und ersetzen per Makro

Suchen und ersetzen per Makro
11.10.2022 14:49:21
Dieter
Moin aus Hamburg,
in einem Tabellenblatt generiere ich eine Reihe von Excel Formeln als Text. Beispiel:
Inhalt von Zelle A1: =
Inhalt von Zelle A2: C1
Inhalt von Zelle A3: +
Inhalt von Zelle A4: C2
Das erzeugt in Zelle A6 mit der Formel TEXTVERKETTEN(;Wahr;A1:A4) diese Zeichenfolge
(keine Formel): =C1+C2
Mit markierter Zelle A6 und Strg-F wird nach '=' gesucht und durch '=' ersetzt.
Dadurch entsteht ein echtes Gleichheitszeichen und in Zelle A6 werden die Inhalte von
C1 und C2 (z.B. 3 und 5) zu 8 addiert.
Das funktioniert an Stelle von A6 auch für ganze Bereiche.
Diese manuelle Verfahren ist mir zu fehleranfällig. Deshalb habe ich während des manuellen
Ersetzens dieses Makro aufgezeichnet:

Sub Makro8()
' Makro8 Makro
ThisWorkbook.Sheets("Eng").Range("Eng_FrmDmy2").Select
Selection.Replace What:="=", Replacement:="=", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
Hiermit werden aber keine von Excel verarbeitbare Formeln erzeugt. Es bleibt bei
Zeichenfolgen.
Schon mal Danke vorab und beste Grüße
Dieter

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen und ersetzen per Makro
11.10.2022 14:57:47
{Boris}
Hi,
mach es so:
Selection.Value = Selection.Value
BTW: =TEXTKETTE(A1:A4) reicht,.
VG, Boris
AW: Suchen und ersetzen per Makro
11.10.2022 15:47:09
Dieter
Hallo Boris,
Dein Vorschlag funktioniert, wenn es sich um wenige Zellen
in den ersten Spalten der Tabelle handelt. In meiner Tabelle
stehen etwa 1300 Zellen im Spaltenbereich TA bis AAA.
Da verabschiedet sich das Makro mit 'zu wenig Speicher'.
Selbst, wenn ich eine einzelne Zelle in der Mitte meiner
Tabelle behandele, steigt das Makro aus.
Beste Grüße
Dieter
AW: Suchen und ersetzen per Makro
11.10.2022 16:49:08
Daniel
Hi
dann könntest du probieren, ob es besser geht wenn du es einzeln machst:

dim Zelle as range
for each Zelle in Selection
if Zelle.Value Like "=*" Then Zelle.Formula = Zelle.Value
next
(ggf auch Zelle.FormulaLocal = Zelle.Value wenn die Formeln in Deutsch geschrieben sind.
Gruß Daniel
Anzeige
AW: Suchen und ersetzen per Makro
11.10.2022 15:03:12
Daniel
Hi
Da fehlt noch ein Schritt.
Du musst Zelle A6 kopieren und als Wert einfügen.
Diesen Wert kannst du dann mit Ersetzten in eine Formel wandeln, aber nicht die Formel selbst.
Gruß Daniel
AW: Suchen und ersetzen per Makro
11.10.2022 15:40:32
Dieter
Moin Daniel,
ich schicke Die mal das gesamte Makro. Darin wird ein Bereich kopiert,
die Werte daraus an anderer Stelle als Zeichenfolgen eingesetzt. Also
gibt es das von Dir angesprochene Kopieren und Einsetzen.
Danach kommt das Ersetzen von '=' durch '=', was automatisch
nicht funktioniert, aber danach manuell mit Strg-F "Suchen und
Ersetzen".

Sub Eng_UpdEng()
'2022-10-11
'check if locked
If ThisWorkbook.Sheets("Eng").Range("Eng_UpdEngBtn") = "" Then
Exit Sub
End If
'declarations
'Dim Day As Integer 'loop counter
Dim SrcRng As Range 'formula sources 'Eng_FrmSrc' and 'Eng_Day00Src'
Dim TgtRng As Range ''Eng_Day00Tgt' for formulas from 'Eng_FrmSrc'
'and 'Eng_Day00Tgt' ... 'Eng_Day38Tgt' for 'Eng_Day00Src'
ActiveSheet.Unprotect
'copy formulas (range 'Eng_FrmSrc', currently 'Eng!$905:$940')
ThisWorkbook.Sheets("Eng").Range("Eng_FrmSrc").Select
Selection.Copy
'paste contents
'select target (range 'Eng_Day00Tgt', currently 'Eng!$A$1005')
ThisWorkbook.Sheets("Eng").Range("Eng_FrmDmy1").Select
'paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'replace text "=" with formula "=" (range 'Eng_FrmSrc', currently 'Eng!$1005:$1040')
'select formula range in Day 00 '905 ... 940 => 5005 ... 5040
ThisWorkbook.Sheets("Eng").Range("Eng_FrmDmy2").Select
'replace
Selection.Replace What:="=", Replacement:="=", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ActiveSheet.Protect
End Sub
Der Vorschlag von Boris, den replace Teil durch 'Selection.Value = Selection.Value'
zu ersetzen, funktioniert nur bei einer kleinen Anzahl von Formeltexten, und das
auch nur, wenn die sich in den ersten Spalten befinden.
In meinem Fall sind das insgesamt ca. 1300 Formeltexte im Bereich der Spalten TA bis AAA.
Beste Grüße
Dieter
Anzeige
AW: Suchen und ersetzen per Makro
11.10.2022 16:05:41
Daniel
Hi
Ich fass mal den Code auf das wesentliche zusammen und schreibe die Zeilen direkt untereinander.
Vielleicht fällt dir dann dein Fehler selber auf, zumindest vermute ich mal, das es der Fehler ist, denn beurteilen kann ich das ohne die Datei nicht.
Also hier mal die wichtigen Zeilen, reduziert auf die notwendigen Parameter und ohne das Überflüssige .Select/Selection.
Siehst du jetzt, wo der Fehler liegen könnte?
Du musst ja das Ersetzten in dem Zellbereich ausführen, in dem du die erzeugten Formeltexte eingefügt hast.

With  ThisWorkbook.Sheets("Eng")
.Range("Eng_FrmSrc").Copy
.Range("Eng_FrmDmy1").PasteSpecial Paste:=xlPasteValues
.Range("Eng_FrmDmy2").Replace What:="=", Replacement:="=", LookAt:=xlPart
End With
Gruß Daniel
Anzeige
Noch ein Hinweis
11.10.2022 16:45:30
Daniel
Wenn man manuell mit Suchen/Ersetzen arbeitet, müssen die Formeltexte in der deutschen Schreibweise geschrieben sein.
Macht man das aber per Makro, braucht man die Amerikanische Formelschreibweise als Text, dh Komma als Parametertrennzeichen und englische Funktionsnamen.
Solange du nur einfache Berechnungen mit +-*/ machst, gibt es keinen Unterschied.
Sobald du Funktionen (Summe()...) verwendest, musst du das beachten.
Vielleicht sollest du mal die Datei hochladen.
Gruß Daniel
anstatt = durch = zu ersetzen, ...
11.10.2022 16:15:04
Rudi
Hallo,
... ist es imho sinnvoller, den Text direkt in eine Formel umzuwandeln.
Schema:

Selection.FormulaLocal = Selection.Value
Gruß
Rudi
Anzeige

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige