Частичная текстовая строка VBA - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь создать «оператор If», где я проверяю столбец B, содержит ли он частичную строку («BMC-»).Затем напишите «Спецификация» в столбце E.

Я уже пытался использовать формулу, но я хотел бы, чтобы это было записано в виде макроса.

= IF (ISNUMBER (SEARCH ("BMC - ", B14))," Спецификация "," ")

  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

Я хочу, чтобы код зацикливался до последней строки, чтобы найти все строки, содержащие частичный текст" BMC-"в колонке B написать" ведомость материалов "в колонке E

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Просто используйте формулу, которая у вас уже есть, цикличность не требуется. Также объявите свои переменные. Используйте переменные вместо жестко заданных значений констант, чтобы код легче было настраивать и поддерживать. Нечто подобное должно работать у вас:

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 голосов
/ 04 апреля 2019

Вы можете попробовать этот подход, используя функцию split () :

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 голосов
/ 04 апреля 2019

У Тима сплошной случай Like, хотя я склонен использовать InStr ():

Sub Descriptions()
    For r = 14 To Cells(Rows.Count, "B").End(xlUp).Row
        'On Error Resume Next  'get rid of that... find error and fix/build logic, don't ignore it
        If Instr(Cells(r, "B").Value, "BMC-9") Then
            Cells(r, "E").Value = "Bill of Materials"
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...