Ich habe eine Spalte mit Zahlen von über 500 Zeilen. Ich muss VBA verwenden, um zu überprüfen, ob die Variable X mit einem der Werte in der Spalte übereinstimmt.
Kann mir bitte jemand helfen?
Wenn Sie dies ohne VBA tun möchten, können Sie eine Kombination aus IF
, ISERROR
und MATCH
verwenden.
Wenn sich alle Werte in Spalte A befinden, geben Sie diese Formel in Spalte B ein:
=IF(ISERROR(MATCH(12345,A:A,0)),"Not Found","Value found on row " & MATCH(12345,A:A,0))
Dies sucht nach dem Wert "12345" (der auch eine Zellreferenz sein kann). Wenn der Wert nicht gefunden wird, gibt MATCH
"# N/A" zurück und ISERROR
versucht, dies abzufangen.
Wenn Sie VBA verwenden möchten, können Sie am schnellsten eine FOR-Schleife verwenden:
Sub FindMatchingValue()
Dim i as Integer, intValueToFind as integer
intValueToFind = 12345
For i = 1 to 500 ' Revise the 500 to include all of your values
If Cells(i,1).Value = intValueToFind then
MsgBox("Found value on row " & i)
Exit Sub
End If
Next i
' This MsgBox will only show if the loop completes with no success
MsgBox("Value not found in the range!")
End Sub
Sie können Arbeitsblattfunktionen in VBA verwenden, sie sind jedoch wählerisch und werfen manchmal unsinnige Fehler auf. Die FOR
-Schleife ist ziemlich narrensicher.
Die Suchmethode eines Bereichs ist schneller als die Verwendung einer for-Schleife zum manuellen Durchlaufen aller Zellen.
hier ist ein Beispiel für die Verwendung der Suchmethode in vba
Sub Find_First()
Dim FindString As String
Dim Rng As Range
FindString = InputBox("Enter a Search value")
If Trim(FindString) <> "" Then
With Sheets("Sheet1").Range("A:A") 'searches all of column A
Set Rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
Application.Goto Rng, True 'value found
Else
MsgBox "Nothing found" 'value not found
End If
End With
End If
End Sub
Am einfachsten ist es, Match
zu verwenden.
If Not IsError(Application.Match(ValueToSearchFor, RangeToSearchIn, 0)) Then
' String is in range
versuche dies:
If Application.WorksheetFunction.CountIf(RangeToSearchIn, ValueToSearchFor) = 0 Then
Debug.Print "none"
End If