2016-04-08 7 views
0

Im derzeit mit diesem VBA-Code, der Werte in Spalte A in Sheet2 betrachtet und wenn gefunden, entfernt es diesen Wert in Spalte A in Sheet1.VBA wenn Wert in Spalte A dann ersetzen in Spalte B

Sub ifFoundReplace() 
 
Dim i As Long, ws1 As Worksheet, ws2 As Worksheet 
 
Set ws2 = Sheets("Sheet2") 
 
Set ws1 = Sheets("Sheet1") 
 
    For i = 2 To ws2.Range("A" & Rows.Count).End(3).row 
 
     ws1.Columns(1).Replace ws2.Cells(i, "A") & " ", "", xlPart 
 
     ws1.Columns(1).Replace " " & ws2.Cells(i, "A"), "", xlPart 
 
    Next i 
 
End Sub

Also, auf Sheet1 in Spalte A habe ich:

ein weißes

b schwarz

d weiß

c Orange

Auf Sheet2 in Spalte AI haben:

ein

b

d

c

Wenn ich die VBA laufen, als Folge ich weiß, schwarz, orange , Weiß, ohne a, b, c, d, wie diese Werte in Sheet2 sind.

Aber wenn ich diese in Sheet1 in Spalte A:

weiß ein

schwarz b

weiß d

Orange c

der Code nicht richtig funktioniert.

Prost

+0

Grundsätzlich möchte ich alle genauen Übereinstimmungen entfernen, also nur "a". – user3536226

Antwort

0

Sie könnten Regex verwenden, wenn die Zeichenfolge mit weißen Raum, Zeilenanfang oder Ende der Zeile umgebenden gefunden identifizieren würde. Etwas wie das.

Dim regex As Object, str As String 
Set regex = CreateObject("VBScript.RegExp") 

With regex 
    .Pattern = "(^|[[:blank:]])[" + :: VALUE FROM SHEET 1:: + "]($|[[:blank:]])" 
    .Global = True 
End With 

val = ::value of cell you are evaluating:: 
newVal = regex.Replace(val , "") 

Dann setzen Sie einfach newVal in die Zelle, die Sie bewerten. Ich bin bei der Arbeit, also kann ich das nicht testen, aber das bringt dich hoffentlich auf den richtigen Weg.

Verwandte Themen