web-dev-qa-db-fra.com

Vérifier si la valeur existe dans la colonne dans 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 s'il vous plaît?

25
Trung Tran

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

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

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

Cela cherchera la valeur "12345" (qui peut aussi être une référence de cellule). Si la valeur n'est pas trouvée, MATCH renvoie "# N/A" et ISERROR tente de l'attraper.

Si vous voulez utiliser VBA, le moyen le plus rapide consiste à utiliser une boucle FOR:

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 les fonctions de feuille de calcul dans VBA, mais elles sont pointilleuses et génèrent parfois des erreurs insensées. La boucle FOR est plutôt infaillible.

21
Jake Bathman

La méthode de recherche d'une plage est plus rapide que d'utiliser une boucle for pour parcourir toutes les cellules manuellement.

voici un exemple d'utilisation de la méthode find dans 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

Le plus simple est d'utiliser Match

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

essaye ça:

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