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 Réponses :
TIM a un cas solide comme code>, bien que j'ai tendance à utiliser Instr ():
@Christophalerlee s'il vous plaît marquer comme répondu si votre question est résolue
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
Vous pouvez essayer cette approche en utilisant 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
si les cellules (r, "b"). Valeur comme "* bmc- *" alors code>Débarrassez-vous du
sur erreur de reprise suivant code> 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.)