webentwicklung-frage-antwort-db.com.de

Überprüfen Sie, ob der Wert in der Spalte in VBA vorhanden ist

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?

25
Trung Tran

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.

21
Jake Bathman

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
45
scott

Am einfachsten ist es, Match zu verwenden.

If Not IsError(Application.Match(ValueToSearchFor, RangeToSearchIn, 0)) Then
    ' String is in range
29
chris neilsen

versuche dies:

If Application.WorksheetFunction.CountIf(RangeToSearchIn, ValueToSearchFor) = 0 Then
Debug.Print "none"
End If
0
user11078722