Использование подстановочных знаков с оператором IF - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь использовать приведенный ниже код в своем VBA, но он не работает, у меня много или ячеек, содержащих HFMWO123455 и т. Д., Числа меняются.Любая помощь приветствуется.

If ((.Cells(K, "E").Value = "HFMWO*")) Then
    J = J + 1
    .Rows(K).EntireRow.Copy Destination:=Worksheets("Facilities").Range("A" & J + 1)
    .Rows(K).EntireRow.Delete
End If

Ответы [ 4 ]

0 голосов
/ 19 марта 2019

Для этого вы должны использовать оператор Like.

'Public Sub StringLike()
'    Dim K As Long: K = 1
'    Dim J As Long: J = 1
'    With ActiveSheet.UsedRange
        If .Cells(K, "E").Value Like "HFMWO*" Then
            J = J + 1
            .Rows(K).EntireRow.Copy Destination:=Worksheets("Facilities").Range("A" & J + 1)
            .Rows(K).EntireRow.Delete
        End If
'    End With
'End Sub

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

Кстати, в будущем, пожалуйста, включайте в свои вопросы примеры кода, которые можно легко протестировать.

0 голосов
/ 19 марта 2019

Вам нужен оператор Like для сравнения символов подстановки.

If .Cells(K, "E").Value LIKE "HFMWO*" Then
    J = J + 1
    .Rows(K).EntireRow.Copy _
       Destination:=Worksheets("Facilities").Range("A" & J + 1) 
    .Rows(K).EntireRow.Delete
End If
0 голосов
/ 19 марта 2019

Вы можете попробовать:

Option Explicit

Sub test()

    Dim j As Long, k As Long

    With ThisWorkbook.Worksheets("Sheet1") '<- Change sheet name to fit your needs

        If InStr(1, .Cells(k, "E").Value, "HFMWO", vbTextCompare) > 0 Then
            j = j + 1
            .Rows(k).EntireRow.Copy Destination:=Worksheets("Facilities").Range("A" & j + 1)
            .Rows(k).EntireRow.Delete
        End If

    End With

End Sub

Примечания:

  • Если вы зацикливаетесь, стремясь удалить строки, выполните цикл снизу вверх.
0 голосов
/ 19 марта 2019

Есть два простых способа.Если вы проверяете, существует ли только подстрока в строке, попробуйте следующее:

If Instr(SearchString, target) then
    ' Do stuff
End If

В качестве альтернативы, вы можете использовать «Like»:

If SearchString LIKE "*" &target & "*" Then
    'Do stuff
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...