VBA ersetzt mehrere Zeichenfolgen aus einer separaten Liste
Frage
Ich muss STRINGS ersetzen, aber bisher ist es mir gelungen, nur Wörter zu ersetzen.Der Code durchläuft die Spalte „Beschreibung“ und soll jede Sequenz aus der Liste ersetzen.Die Idee ist, Abkürzungen zu verwenden(neue Werte) statt vollständiger Wörter (alte Werte).
Jedes Mal, wenn ein benachbartes Wort, Zeichen usw. (kein Leerzeichen) vorhanden ist, schlägt der Code fehl.Was ist falsch?Danke schön!!!
Sub ReplaceWords_BUT_Need_ToReplaceStrings()
Application.ScreenUpdating = False
'This macro works with separated words only. Eliminate hyphens etc before applying this macro.
Dim r As Range, A As Range
Dim s1 As Worksheet, s2 As Worksheet, LastRow As Integer, v As String, j As Integer,
oldv As String, newv As String
LastRow = Cells(Rows.count, "A").End(xlUp).row
Set s1 = Sheets("JE_data")
Set s2 = Sheets("ListToReplace")
Set A = s1.Range("J:J").Cells.SpecialCells(xlCellTypeConstants)
For Each r In A
v = r.Value
For j = 2 To LastRow
oldv = s2.Cells(j, 1).text
newv = s2.Cells(j, 2).text
Bei der Funktion „Ersetzen“ muss die Groß-/Kleinschreibung beachtet werden.„Sind Sie sicher, dass alle Ihre Rechnungswörter mit Großbuchstaben beginnen?'Wenn nicht, verwenden Sie stattdessen die Funktion v = Replacement(v, oldv, newv, 1, -1, vbTextCompare).OK.
v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
'v = Replace(v, oldv, newv)
Next j
r.Value = Trim(v)
Next r
Application.ScreenUpdating = True
End Sub
Beispiel:
ListToReplace
Left column (old) Right column (new)
----------------------------------------
Invoice inv
Salary sy
Credit cr
JE_data
cr Note
cr note
INV/2712/14RF/0229/14
Invoice 1078 10
TECHNOQ01SI 2014 03288
(Anmerkung des Herausgebers: Ich weiß nicht, ob das Beispiel korrekt ist, da es in den Kommentaren geschrieben wurde)
Credit
wurde durch ersetzt cr
Und Invoice
sollte voraussichtlich durch ersetzt werden inv
Aber es war nicht so
Lösung
Bei der Ersetzungsfunktion, wie Sie sie verwendet haben, muss die Groß-/Kleinschreibung beachtet werden.Sind Sie sicher, dass alle Ihre Rechnungswörter mit Großbuchstaben beginnen?Wenn nicht, dann verwenden
v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
Funktion stattdessen.