Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Suchen und Ersetzen mit variablen Inhalt


Betrifft: Suchen und Ersetzen mit variablen Inhalt von: dove
Geschrieben am: 05.01.2018 12:54:51

Hallo zusammen,

ich habe ein kleines Problem und hoffe ihr könnt mir helfen.

Ich würde gerne mit folgendem Code nach einer bestimmten Spalte "SNDCMPS" suchen und in dieser Spalte nach einer Versionsnummer suchen und diese ersetzen / löschen.

DIe Versionsnummer ist folgendermaßen aufgabaut: [VXX]
Die XX stehen für Zahlen die beliebig sein können.

Ich steh grad auf dem Schlauch, was ich eingeben muss, damit er die beliebige Zahl nach dem V mitlöscht.

Sub DeleteVersionNumber()

Dim ColName As Range

Set ColName = ThisWorkbook.Worksheets(wbkZiel.Sheets.Count).Rows(1).Find(what:=SNDCMPS, lookat:= _
 _xlWhole)

If ColName Is Nothing Then
MsgBox "Spalte konnte nicht gefunden werden!"
Else

ColName.EntireColumn.Select

Selection.Replace what:=" ", Replacement:=" ", lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

End If


End Sub

  

Betrifft: AW: immer [Vxx]? owT von: Fennek
Geschrieben am: 05.01.2018 14:12:45




  

Betrifft: AW: immer [Vxx]? owT von: dove
Geschrieben am: 05.01.2018 14:38:00

Hallo Fennek,

[VXX] steht ja nicht in den Zellen, sondern [V21], [V77] usw. Deswegen habe ich ja darauf hingewiesen, dass es beliebige Zahlen sein können.

LG


  

Betrifft: AW: like "V##" von: Fennek
Geschrieben am: 05.01.2018 14:53:13

nicht präzise genug!

teste, ob


msgbox Range("A1") like "*~[V##~]*"
"Wahr" ergibt. Als Range muss eine geeignete Zelle gewählt werden.

mfg


  

Betrifft: AW: kleiner Test von: Fennek
Geschrieben am: 05.01.2018 15:30:56

Hallo,

mit "like" hat es nicht geklappt, aber mit der "Echse". Mein Code zum Testen:

'asdh [V12] djasi
Sub Rex()
Dim Tx As String
Tx = Cells(1, 1)
Neu = "34"
With CreateObject("vbscript.regexp")
    .Pattern = "(\[V)(\d{2})(\])"
    If .test(Tx) Then
        Tx = .Replace(Tx, "$1" & Neu & "$3")
    End If
End With
Debug.Print Tx
End Sub
Kannst Du das in deine Suche einbauen?

mfg


  

Betrifft: AW: komplet von: Fennek
Geschrieben am: 05.01.2018 15:48:57

Hallo,

der Code sollte die Frage beantworten. Zur Prüfung wird das Ergebnis in die nächste Spalte geschrieben. Wenn alles passt, einfach das "offset" löschen.

Function Rex(rng As Range) As String
Tx = rng.Value
Neu = "34"
With CreateObject("vbscript.regexp")
    .Pattern = "(\[V)(\d{2})(\])"
    If .test(Tx) Then
        Tx = .Replace(Tx, "$1" & Neu & "$3")
    End If
End With
Debug.Print Tx
Rex = Tx
End Function

Sub dove()
Such = "SNDCMPS"
Col = WorksheetFunction.Match(Such, Rows(1), 0)
For Each ar In Columns(Col).SpecialCells(2, 2).Areas
    Debug.Print ar.Address
     ar.Cells(1).Offset(, 1) = Rex(ar.Cells(1))
Next ar
End Sub
Es wurde angenommen, dass nicht in zwei Zeilen untereinander Treffet sind.

mfg


  

Betrifft: AW: komplet von: dove89
Geschrieben am: 05.01.2018 17:17:24

Hallo Fennek,

ich habe deinen Code nicht ausprobiert, da deine Annahme unzutreffend war. Ich hätte erwähnen sollen, dass in so gut wie in jeder Zeile in der Spalte eine Versionsnummer steht.

Kannst du deinen Code dementsprechend anpassen?

Danke.

LG


  

Betrifft: AW: untested von: Fennek
Geschrieben am: 05.01.2018 17:46:45


 Sub dove()
 Such = "SNDCMPS"
 Col = WorksheetFunction.Match(Such, Rows(1), 0)
 For i = 2 to cells(rows.count, Col).end(xlup).row
      cells(i, Col) = Rex(ar.Cells(i, Col))
 Next ar
 End Sub



  

Betrifft: AW: untested (Korrektur) von: Fennek
Geschrieben am: 05.01.2018 20:01:28


 Sub dove()
 Such = "SNDCMPS"
 Col = WorksheetFunction.Match(Such, Rows(1), 0)
 For i = 2 to cells(rows.count, Col).end(xlup).row
      cells(i, Col) = Rex(Cells(i, Col))
 Next i
 End Sub



Beiträge aus dem Excel-Forum zum Thema "Suchen und Ersetzen mit variablen Inhalt"