я хочу добавить несколько слов в левом состоянии - PullRequest
0 голосов
/ 10 февраля 2020

Я написал условие if, используя левое условие, что, если первые 3 символа ячейки - "CAK", скопируйте ячейку и вставьте ее на другой лист. это сработало успешно, но теперь я хочу найти 5, 6 слов для поиска, таких как «CAK», «BDD,« GHH »,« BAK »,« GHH », может кто-нибудь сказать мне, как сохранить несколько слов,

Мне нужен код VBA, например, если первые 3 символа ячейки - это "CAK", или "BDD", или "GHH", или "BAK", или "GHH", затем скопируйте и вставьте.

Sub NOTES()

For C = 27 To 33

    A = Worksheets("EDAT").Cells(Rows.Count, 1).End(xlUp).Row

    For I = 12 To A

    Worksheets("EDAT").Activate
    Worksheets("EDAT").Cells(I, C).Activate

     If (Left(ActiveCell, 3) = "CAK") Then
        Worksheets("sheet1").Cells(I, C).COPY
        Worksheets("sheet2").Activate
        b = Worksheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("sheet2").Cells(b + 1, 1).Select
        ActiveSheet.Paste
        Worksheets("sheet1").Cells(I, 10).COPY
        Worksheets("sheet2").Activate
        Worksheets("sheet2").Cells(b + 1, 8).Select
        ActiveSheet.Paste
        Worksheets("sheet1").Cells(I, 11).COPY
        Worksheets("sheet2").Activate
        Worksheets("sheet2").Cells(b + 1, 9).Select
        ActiveSheet.Paste
    End If

    Next

Next

End Sub

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

Просто измените это:

If (Left(ActiveCell, 3) = "CAK") Then

на это:

If ((Left(ActiveCell, 3) = "CAK") or Left(ActiveCell, 3) = "BDD") or Left(ActiveCell, 3) = "GHH") or Left(ActiveCell, 3) = "BAK")) then
0 голосов
/ 10 февраля 2020

Если вы хотите делать то же самое каждый раз, когда совпадают три символа, попробуйте следующее:

If (Left(ActiveCell, 3) = "CAK" Or Left(ActiveCell, 3) = "BDD" Or Left(ActiveCell, 3) = "GHH" Or Left(ActiveCell, 3) = "BAK" Or Left(ActiveCell, 3) = "GHH") Then

Это можно немного очистить, используя String Array и зацикливая его:

Dim matchingLetters As Variant
matchingLetters = Array("CAK", "BDD", "GHH", "BAK", "GHH")

For Each str In matchingLetters
    If (Left(ActiveCell, 3) = str) Then
        Worksheets("sheet1").Cells(I, C).COPY
        Worksheets("sheet2").Activate
        b = Worksheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("sheet2").Cells(b + 1, 1).Select
        ActiveSheet.Paste
        Worksheets("sheet1").Cells(I, 10).COPY
        Worksheets("sheet2").Activate
        Worksheets("sheet2").Cells(b + 1, 8).Select
        ActiveSheet.Paste
        Worksheets("sheet1").Cells(I, 11).COPY
        Worksheets("sheet2").Activate
        Worksheets("sheet2").Cells(b + 1, 9).Select
        ActiveSheet.Paste
    End If
Next
0 голосов
/ 10 февраля 2020

Вы можете использовать MATCH метод для сопоставления значения с массивом.

.Match (Arg1, Arg2, Arg3)
Arg1    Required    Variant Lookup_value.
Arg2    Required    Variant Lookup_array.
Arg3    Optional    Variant Match_type: the number -1, 0, or 1.

Или вы можете использовать следующую функцию:

Function IsInArray(stringToBeFound As String, arr As Variant) As Long
  Dim i As Long
  ' default return value if value not found in array
  IsInArray = -1

  For i = LBound(arr) To UBound(arr)
    If StrComp(stringToBeFound, arr(i), vbTextCompare) = 0 Then
      IsInArray = i
      Exit For
    End If
  Next i
End Function

И затем вызвать выше :

array= Split("CAK,BDD,GHH,BAK,GHH", ",")
IsInArray(CellValue, array)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...