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?
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.
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
Le plus simple est d'utiliser Match
If Not IsError(Application.Match(ValueToSearchFor, RangeToSearchIn, 0)) Then
' String is in range
essaye ça:
If Application.WorksheetFunction.CountIf(RangeToSearchIn, ValueToSearchFor) = 0 Then
Debug.Print "none"
End If