Как написать цикл, который имеет несколько критериев? - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь заменить значения в столбце на основе определенных критериев.Вот мой код:

   For i = .Rows.Count To 1 Step -1
        If .Item(i) = "w" Or "x" Or "y" Or "z" Then

            .Item(i) = "A"

        End If                 
    Next i

Если значение в ячейке равно w, x, y или z, мне нужно, чтобы оно равнялось «A».Этот цикл работает, если я делаю каждый символ по отдельности, но как мне объединить критерии вместе?

Ответы [ 4 ]

0 голосов
/ 12 декабря 2018

Метод Range.Replace выполнит это быстро.

dim repl as variant, i as long

repl = array("w", "x", "y", "z")

for i = lbound(repl) to ubound(repl)
    activesheet.range("A:A").replace what:=repl(i), replacement:="A", _
                                     lookat:=xlwhole, matchcase:=False
next i
0 голосов
/ 12 декабря 2018

Здесь я бы предпочел выбрать регистр


For i = .Rows.Count To 1 Step -1
     Select Case .Item(i)
         Case "w", "x", "y", "z"
             .Item(i) = "A"
         Case "something else"
             'If you have other criteria
         Case Else
             'If you have a action item for something that isn't any of the above
     End Select
 Next i
0 голосов
/ 12 декабря 2018

Я хотел бы использовать для этого массив ввода;тогда вы можете легко изменить массив, но код все равно будет работать.Что-то вроде:

Dim arr() As String: arr = Split("w,x,y,z", ",")
For i = .Rows.Count To 1 Step -1
    For j = LBound(arr) To UBound(arr)
        If .Item(i) = arr(j) Then .Item(i) = "A"
    Next j
Next i
0 голосов
/ 12 декабря 2018

Есть много способов сделать это, но так как вы почти готовы, я предложу вариант, который ближе всего соответствует вашей попытке:

If .Item(i) = "w" Or .Item(i) = "x" Or .Item(i) = "y" Or .Item(i) = "z" Then

вместо существующего IF.Это правильный способ использования Or для этих решений.

В качестве альтернативы, немного более приятный способ, который легче развернуть (и прочитать), будет просто искать вхождение элемента поиска в более длинномстрока.Я разделил совпадения разделителем | на случай, если ячейка содержит, например, xy, и вы не хотите, чтобы это совпадало.Вы можете изменить разделитель, если есть вероятность, что он может быть использован в вашей таблице.

If InStr(1, "w|x|y|z", .Item(i), vbBinaryCompare) Then

Измените vbBinaryCompare на vbTextCompare, если вы не хотите, чтобы он чувствителен к регистру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...