A |
D |
C |
Apfel |
Birne |
Melone |
Kirsche |
Birne |
Ananas |
Melone |
Ananas |
Birne |
Melone |
Kirsche |
Apfel |
Ananas |
Melone |
Apfel |
Ananas |
Birne |
Apfel |
Ananas |
Apfel |
Birne |
Ananas |
Apfel |
Kirsche |
Birne |
Kirsche |
Melone |
Das Makro von volti hergenommen und abgehändert:
Option Explicit
Option Compare Text
Sub Ersetze2()
Dim iZeile As Long, iSpalte As Long, iCheck As Integer
Dim sSuch1 As String, sSuch2 As String, sErsetz As String
Dim rngBereich As Excel.Range
Dim rngZelle As Excel.Range
sSuch1 = "apfel"
sSuch2 = "Birne"
sErsetz = "Apfelkuchen"
Set rngZelle = Range("A1")
Do While rngZelle.MergeCells
'Bereich referenzieren
' in der Spalte von rngZelle, nach der letzter Zelle mit Inhalt suchen
' (von unten nach oben)
Set rngBereich = rngZelle.MergeArea.Resize(Cells(Rows.Count, rngZelle.Column).End(xlUp).Row - rngZelle.Row + 1)
'2 = erste DATENzeile / erste Zeile ist jeweils der verbundene Bereich ('A' / 'D' / 'C')
For iZeile = 2 To rngBereich.Rows.Count
iCheck = 0
For iSpalte = 1 To rngBereich.Columns.Count
'Hier wird nach 'Apfel' in 'Ein Apfel ist super-lecker. Birnen sind auch ok.' gesucht
' würde allerdings auch auf 'Ein Apfelkuchen ist super-lecker. Ein Birnenkuchen tut es aber auch.'
' passen!!
If rngBereich(iZeile, iSpalte).Value Like ("*" & sSuch1 & "*") Then iCheck = (iCheck Or 1)
If rngBereich(iZeile, iSpalte).Value Like ("*" & sSuch2 & "*") Then iCheck = (iCheck Or 2)
'Sobald wir wissen das sSuch1 + sSuch2 einmal vorhanden sind,
' können wir die Suche hier beenden
If iCheck = 3 Then Exit For
Next
If iCheck = 3 Then
'ACHTUNG: (siehe oben)
' 'Apfel' -| 'Apfel' := 'Apfelkuchen' |-> 'Apfelkuchen'
' 'Apfelkuchen' -| 'Apfel' := 'Apfelkuchen' |-> 'Apfelkuchenkuchen'
rngBereich.Rows(iZeile).Replace _
What:=sSuch1, _
Replacement:=sErsetz, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
End If
Next
'da rngZelle ein verbundener Bereich ist,
'springen wir hier nicht nur eine (1) Zelle nach rechts,
'sondern um die Anzahl von 1 * rngZelle.MergeArea.Columns.Count
Set rngZelle = rngZelle.Offset(0, 1)
Loop
End Sub
|