0
votes

String de texte partiel VBA

J'essaie de créer une "instruction si" lorsque je vérifie la colonne B s'il contient une chaîne partielle ("BMC-"). Ensuite, écris "Bill of Matériel" dans la colonne E.

J'ai déjà essayé d'utiliser une formule, mais j'aimerais que ceci écrit comme une macro. P>

= si (isnombre ("BMC- ", B14))," Bill of Matériel "," ") P>

  Sub Descriptions()

  For r = 14 To Cells(Rows.Count, "B").End(xlUp).Row     ' From row 1 to 
  the last row with data

On Error Resume Next

If Cells(r, "B") = "BMC-9" > 0 Then
    Cells(r, "E").Value = "Bill of Materials"
End If

Next



End Sub


3 commentaires

si les cellules (r, "b"). Valeur comme "* bmc- *" alors


Débarrassez-vous du sur erreur de reprise suivant aussi. S'il y a une erreur, vous voudrez définir un gestionnaire d'erreur.


(Vous pouvez toujours activer l'enregistreur de macro, entrez votre formule, puis voir le code généré. Il vous montrera comment vous pouvez utiliser cette formule exacte dans VBA.)


3 Réponses :


0
votes

TIM a un cas solide comme , bien que j'ai tendance à utiliser Instr (): xxx


1 commentaires

@Christophalerlee s'il vous plaît marquer comme répondu si votre question est résolue



1
votes

Utilisez simplement la formule que vous avez déjà, aucune boucle requise. Déclarez également vos variables. Utilisez des variables à la place des valeurs constantes de codage rigide afin que le code soit plus facile à régler et à entretenir. Quelque chose comme ça devrait travailler pour vous:

Sub tgr()

    'Declare variables
    Dim ws As Worksheet
    Dim lHeaderRow As Long
    Dim sSearchCol As String
    Dim sOutputCol As String
    Dim sTextToFind As String
    Dim sTextToWrite As String

    'Set this to the actual worksheet where you want the formula
    Set ws = ActiveWorkbook.ActiveSheet

    'Define variables
    lHeaderRow = 13                     'Header Row.  Actual data and results will start on the next row
    sSearchCol = "B"                    'Column to search for the text
    sOutputCol = "E"                    'Column to output results
    sTextToFind = "BMC-"                'Text to search for
    sTextToWrite = "Bill of Material"   'Text that will be output when search text is found

    'Use previously defined variables to establish range
    With ws.Range(sOutputCol & lHeaderRow + 1 & ":" & sOutputCol & ws.Cells(ws.Rows.Count, sSearchCol).End(xlUp).Row)
        If .Row <= lHeaderRow Then Exit Sub 'No data

        'Apply your formula to all rows in the range at once
        .Formula = "=IF(ISNUMBER(SEARCH(""" & sTextToFind & """," & sSearchCol & .Row & ")), """ & sTextToWrite & """, """")"

        'Convert cells to values
        .Value = .Value
    End With

End Sub


0 commentaires

0
votes

Vous pouvez essayer cette approche en utilisant SPLIT () FORT> FONCTION:

Sub NewCode()
    For r = 14 To Cells(Rows.Count, "B").End(xlUp).Row  
        Dim myArray As Variant
            myArray = Split(Cells(r, "B"), "BMC-")
            If UBound(myArray) > 0 Then
                Cells(r, "E").Value = "Bill of Material"
            End If     
    Next r
End Sub


0 commentaires