web-dev-qa-db-fra.com

VBA, si une chaîne contient une certaine lettre

Je ne travaille généralement pas avec VBA et je n'arrive pas à comprendre cela. J'essaie de déterminer si une certaine lettre est contenue dans une chaîne sur mon tableur.

Private Sub CommandButton1_Click()
Dim myString As String
RowCount = WorksheetFunction.CountA(Range("A:A"))
MsgBox RowCount
For i = 2 To RowCount
    myString = Trim(Cells(i, 1).Value)
    If myString.Contains("A") Then
        oldStr = Cells(i, 15).Value
        newStr = Left(oldStr, oldStr.IndexOf("A"))
    End If
Next          
End Sub

Ce code doit passer par une liste de valeurs et s’il rencontre la lettre A pour le supprimer et tout ce qui vient après. J'ai des problèmes avec ma déclaration IF, qualificatif non valide. Comment pourrais-je créer une instruction IF si la chaîne de la cellule contient ou non la lettre A?

Merci beaucoup

7
JahKnows

Essayez d’utiliser la fonction InStr qui renvoie l’index dans la chaîne à laquelle le caractère a été trouvé. Si InStr renvoie 0, la chaîne n'a pas été trouvée.

If InStr(myString, "A") > 0 Then

Site Web MSDN InStr

Pour l'erreur sur la ligne affectant newStr, convertissez également oldStr.IndexOf en fonction InStr.

Left(oldStr, InStr(oldStr, "A"))
14
Mark Balhoff

Vous ne savez pas si c'est ce que vous recherchez, mais il passera en boucle dans la plage que vous lui avez attribuée et s'il trouve un "A", il le supprimera de la cellule. Je ne suis pas sûr de savoir à quoi sert oldStr ...

Private Sub foo()
Dim myString As String
RowCount = WorksheetFunction.CountA(Range("A:A"))

For i = 2 To RowCount
    myString = Trim(Cells(i, 1).Value)
    If InStr(myString, "A") > 0 Then
        Cells(i, 1).Value = Left(myString, InStr(myString, "A"))
    End If
Next
End Sub
1
sous2817

Si vous parcourez de nombreuses cellules en boucle, utilisez la fonction binaire, elle est beaucoup plus rapide ... .. L'utilisation de "<> 0" à la place de "> 0" accélère également les choses:

If InStrB(1, myString, "a", vbBinaryCompare) <> 0
0
user3810910

Essayer:

If myString like "*A*" Then
0
PowerUser