Hallo Zusammen,
ich habe schon hier ein Beitrag zu dem Thema: https://www.vba-forum.de/View.aspx?ziel=62548-Pr%C3%BCfen_von_Werten_innerhalb_einer_Zeile aber ich befürchte, dass meine Frage nicht gelesen wird, da der Status "gelöst" ist.
Kurz zum Code: Das Programm soll jede Spalte bzw. verbundene Spalte durchlaufen und prüfen ob "Apfel" und "Birne" vorhanden sind, falls ja, dann soll Apfel durch Apfelkuchen ersetzt werden.
ich habe zu dem Thema noch eine Frage und zwar, wie könnte ich den Code von Gast27006 bearbeiten, damit dieser auch für die beigefügte Tabelle passt?Momentan, bricht der Code die Schleife ab, sobald eine Spalte ohne verbundene Zelle (hier Spalte D) auftaucht und prüft die nachfolgenden Spalten nicht mehr (hier Spalte C).
A
|
D
|
C
|
Apfel
|
Birne
|
Melone
|
Kirsche
|
Birne
|
Ananas
|
Birne
|
Melone
|
Kirsche
|
Apfel
|
Ananas
|
Melone
|
Birne
|
Apfel
|
Ananas
|
Apfel
|
Birne
|
Ananas
|
Apfel
|
Kirsche
|
Melon
|
Hat jemand von euch eine Idee, wie man das Problem beheben kann?
Über jeden Tipp und jede Hilfe bin ich sehr dankbar.
Vorab vielen Dank und viele Grüße
Hier der Code von Gast27006:
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
|