Vérifier si la valeur existe dans la colonne de VBA

j'ai une colonne de nombres de plus de 500 lignes. Je dois utiliser VBA pour vérifier si la variable X correspond à l'une des valeurs de la colonne.

quelqu'un Peut-il m'aider?

24
demandé sur JMK 2012-09-28 18:40:30

4 réponses

Si vous voulez faire cela sans VBA, vous pouvez utiliser une combinaison de IF, ISERROR et MATCH.

si toutes les valeurs sont dans la colonne A, Inscrivez cette formule dans la colonne B:

=IF(ISERROR(MATCH(12345,A:A,0)),"Not Found","Value found on row " & MATCH(12345,A:A,0))

Ce sera pour la valeur "12345" (qui peut aussi être une référence de cellule). Si la valeur n'est pas trouvée, MATCH retourne "#N / a " et ISERROR essaie de l'attraper.

si vous voulez utiliser VBA, le moyen le plus rapide est D'utiliser un pour boucle:

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

vous pouvez utiliser des fonctions de feuille de travail dans VBA, mais ils sont difficiles et parfois jeter des erreurs absurdes. FOR boucle est assez infaillible.

18
répondu Jake Bathman 2012-09-28 14:52:54

la méthode find d'une plage est plus rapide que l'utilisation d'une boucle for pour boucler toutes les cellules manuellement.

voici un exemple d'utilisation de la méthode de recherche en 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
43
répondu scott 2012-09-28 15:37:49

le plus Simple est d'utiliser Match

If Not IsError(Application.Match(ValueToSearchFor, RangeToSearchIn, 0)) Then
    ' String is in range
26
répondu chris neilsen 2012-09-28 23:25:11

essayez d'ajouter WorksheetFunction:

If Not IsError(Application.WorksheetFunction.Match(ValueToSearchFor, RangeToSearchIn, 0)) Then
' String is in range
0
répondu Chris 2018-05-02 22:19:37