2016-05-24 14 views
0

Ich versuche Adressdaten zu vergleichen. Mein aktuelles Makro vergleicht zwei Spalten und gibt "Dropped Data" ein, wenn sie nicht übereinstimmen. Das Problem besteht darin, dass eine große Anzahl dieser Werte nicht verworfen, sondern in eine andere Zelle integriert wurde. Ich möchte mein Makro ändern, um den fehlenden Wert mithilfe des VBA-Like-Operators zu finden. Zum Beispiel würde es "Bldg 3" in "9825 Spectrum Dr Bldg 3" finden. Ich konnte diesen Code vom Web durchsuchen und ich bin mir nicht sicher, welcher Bereich Range("C65536") auswählt.VBA mit ähnlichen Operator mit Platzhaltern

Edit: Ich sehe Leute vorschlagen, ich benutze die Instr-Funktion, die scheint zu tun, was ich tun möchte. Ich bin mir nicht sicher, wie ich es in meinem Makro zum Laufen bringen könnte, damit es die richtigen Zellen referenziert. Es gibt auch (wie ich es verstehe) Werte zurück, die der Anzahl der gefundenen Zeichen entsprechen. In dem Beispiel, das ich angegeben habe, würde es einen Wert von 6 ergeben, wenn Sie das Leerzeichen einschließen.

Sub droppeddata() 

Application.ScreenUpdating = False 

lr = Range("C65536").End(xlUp).Row 
For a = lr To 1 Step -1 
If Not IsEmpty(Cells(a, 13).Value) And IsEmpty(Cells(a, 19)) Then 
Cells(a, 10).Select 
Selection.NumberFormat = "General" 
    ActiveCell.FormulaR1C1 = "N" 
Cells(a, 11).Select 
Selection.NumberFormat = "General" 
    ActiveCell.FormulaR1C1 = "Dropped Data" 
End If 
Next a 

Application.ScreenUpdating = True 
End Sub 
+2

Die Anweisung Range sucht nach der zuletzt verwendeten Zeile (lr) in Spalte C, indem sie bei C65536 beginnt und nach oben springt. Wenn Sie Teile eines Strings innerhalb eines Zellenwerts finden möchten, müssen Sie die Funktion 'InStr' betrachten ... – Dave

+2

Wenn Sie nur überprüfen möchten, ob die Zelle bestimmte Zeichen enthält, können Sie http: // www verwenden. exceltrick.com/formulas_macros/vba-instr-function/ Wenn ich die Frage richtig verstanden habe –

+1

'InStr' sagt dir, ob der Inhalt, den du suchst, in der Zeichenkette ist (und somit der Ursprung des Namens' InStr') . Anstatt zu raten, ob Sie es richtig verstehen, können Sie die Seite @Rob verlinken oder die Dokumentation zur Funktion lesen. –

Antwort

1

Ihr aktuelles Makro vergleicht nichts, wie Sie es wollen, es prüft nur, ob zwei Spalten leer sind oder nicht.

Sie haben nicht sehr spezifisch mit dem, was Sie zu tun versuchen, so wird dieser Code mit ein wenig Vermutung-Arbeit:

Sub droppeddata() 
    Dim lr As Long ' Declare the variable 
    lr = Range("C65536").End(xlUp).Row ' Set the variable 
    ' lr now contains the last used row in column C 

    Application.ScreenUpdating = False 

    For a = lr To 1 Step -1 
     If IsEmpty(Cells(a, 19)) Or InStr(1, Cells(a, 13).Value, Cells(a, 19).Value, vbTextCompare) > 0 Then 
     ' If Cells(a, 19) is empty OR 
     ' Search Cells(a, 13) for the value contained in Cells(a, 19) 
     ' If INSTR returns a match greater than 0, it means the string we're looking for is present 
     ' Enter the loop if either condition is true 

      ' In this section, avoiding SELECT is preferable. Working directly on the ranges is good. 
      With Cells(a, 10) 
       .NumberFormat = "General" 
       .Value = "N" 
      End With 

      With Cells(a, 11) 
       .NumberFormat = "General" 
       .Value = "Dropped Data" 
      End With 
     End If 
    Next a 

    Application.ScreenUpdating = True 
End Sub 

ändern sich die Bereiche/Zellen, um Ihren Bedarf - die aktuelle Die sind nicht dazu gedacht, zu arbeiten, ich habe nur aufgrund Ihres bestehenden Codes erraten.

Verwandte Themen