如何编写具有多个条件的循环?

时间:2018-12-12 16:40:16

标签: excel vba excel-vba loops

我正在尝试根据某些条件替换列中的值。这是我的代码:

   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 :(得分:4)

有很多方法可以做到这一点,但是当您自己快要出现的时候,我将介绍最接近您的尝试的选项:

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

答案 1 :(得分:4)

选择大小写是我的首选方法


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

答案 2 :(得分:2)

我倾向于为此使用数组输入;您可以轻松地更改数组,然后代码仍然可以使用。像这样:

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

答案 3 :(得分:0)

Range.Replace method将很快执行此操作。

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