Microsoft Excel

Herbers Excel/VBA-Archiv

Zelleninhalte anhand von Kriterienspalte ersetzen


Betrifft: Zelleninhalte anhand von Kriterienspalte ersetzen von: Tobias
Geschrieben am: 15.01.2018 16:39:34

Liebes Forum,

ich komme trotz langer Suche nicht weiter und hoffe, Ihr könnt mir eine Richtung nennen, in die ich weiterdenken kann. Ich denke, die Lösung für meine Aufgabe muss eigentlich relativ simpel sein - ich habe aber nur sehr bescheidene VBA Kenntnisse.

Mein Problem:
Ich habe eine umfangreiche, mehrspaltige Tabelle: Tabellenbereich A1:CZ17000. In jeder Zelle ist eine 6stellige ganze Zahl hinterlegt.

Aus dieser Tabelle möchte ich alle Werte ersetzen, die mit den Werten in einem weiteren Arbeitsblatt (nur eine Spalte A1:A220) identisch sind. Ersetzt werden sollen die Werte durch den immer gleichen Text (z.B. "##deleteValue##").

Das dürfte mit VBA doch eigentlich gar nicht so schwer sein - aber ICH kriegs nicht hin.

Vorab vielen Dank!

  

Betrifft: AW: Zelleninhalte anhand von Kriterienspalte ersetzen von: Werner
Geschrieben am: 15.01.2018 16:52:52

Hallo Tobias,

so:

Sub Makro1()
Dim loLetzte As Long, i As Long

With Worksheets("Tabelle1") 'Blattnamen anpassen
    loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
    For i = 1 To loLetzte
        Worksheets("Tabelle2").Cells.Replace What:=.Cells(i, 1).Value, Replacement:="## _
deleteValue##", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Next i
End With
End Sub
Tabelle1 (Name anpassen) ist die Tabelle, auf der sich deine zu ersetztenden Kriterien befinden
Tabelle2 (Name anpassen) ist die Tabelle, auf der die Daten ersetzt werden.

Gruß Werner


  

Betrifft: nochmal neu, weil... von: Werner
Geschrieben am: 15.01.2018 16:55:12

Hallo Tobias,

...ich nicht aufgepasst habe beim Code kopieren und mir die Forensoftware einen Zeilenumbruch rein gemacht hat.

Sub Makro1()
Dim loLetzte As Long, i As Long

With Worksheets("Tabelle1") 'Blattnamen anpassen
    loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
    For i = 1 To loLetzte
        Worksheets("Tabelle2").Cells.Replace What:=.Cells(i, 1).Value, _
        Replacement:="##deleteValue##", LookAt:=xlPart, SearchOrder:=xlByRows, _
        MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Next i
End With
End Sub
Gruß Werner


  

Betrifft: AW: nochmal neu, weil... von: Tobias
Geschrieben am: 16.01.2018 10:21:06

Hallo Werner, hallo Chris,

Ihr seid GROẞARTIG! Vielen Dank für die schnelle Antwort.

Ich habe den Code noch in folgende zwei Zeilen gebettet:

Application.DisplayAlerts = False

Oben stehender code
Application.DisplayAlerts = True
Excel gibt sonst für jede Reihe, in der nichts zum Ersetzen gefunden wird, eine Warnung aus, die man mit "ok" bestätigen muss.

Vielen Dank für Euer Engagement!


VIelen DAnk für Euer Engagement.


  

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T. von: Werner
Geschrieben am: 16.01.2018 10:36:39




  

Betrifft: AW: Zelleninhalte anhand von Kriterienspalte ersetzen von: ChrisL
Geschrieben am: 15.01.2018 16:55:20

Hi

xlWhole statt xlParts ;)

Sub Makro1()
Dim lngZeile As Long
Dim WS1 As Worksheet: Set WS1 = Worksheets("Tabelle1")
Dim WS2 As Worksheet: Set WS2 = Worksheets("Tabelle2")

Application.ScreenUpdating = False
For lngZeile = 1 To WS2.Cells(Rows.Count, 1).End(xlUp).Row
    WS1.Cells.Replace What:=WS2.Cells(lngZeile, 1), Replacement:="##deleteValue##", LookAt:= _
xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Next lngZeile
End Sub
cu
Chris


Beiträge aus dem Excel-Forum zum Thema "Zelleninhalte anhand von Kriterienspalte ersetzen"