循环遍历除少数之外的所有数字

时间:2015-04-15 22:16:38

标签: excel vba excel-vba

我需要遍历i = 1到99,但我想跳过一些特定的i值。 我想跳过的数字是41,83,87,91,92,93,98

我意识到我可以将所有操作嵌套在i <> 41i <> 83等内。 难道没有更简单的方法吗?也许指定一个变量来包含要在CSL中跳过的值并使用Split?我不知道我的大脑不起作用。请帮忙。

     For i = 1 To 99
         If i <> 41 And i <> 83 And i <> 87 And i <> 91 _
         And i <> 92 And i <> 93 And i <> 98 Then
             'do stuff
         End If
     Next i

更愿意设置如下变量:

    not_use = "41,83,87,91,92,93,98"

然后有某种For i = 1 To 99,除非在not_use中,但据我所知,没有办法写出来。

6 个答案:

答案 0 :(得分:6)

您可以使用IfSelect Case语句更紧凑的方式指定要忽略的值:

For i = 1 To 99
  Select Case i
  Case 41, 83, 87, 91, 92, 93, 98
    'Do nothing
  Case Else
    'Do stuff
  End Select
Next

答案 1 :(得分:6)

您可以使用工作表公式评估表达式:

not_use$ = "43,83,87,91,92,93,98"

For i = 1 To 99
    If Application.Evaluate("ISERROR(MATCH(" & i & ",{" & not_use & "},0))") Then
        '// Do Something
    End If
Next i

这意味着&#34;测试&#34;是一次评估,而不是使用多个标准或进一步循环。

答案 2 :(得分:1)

这是一个非常粗略的例子,但解决了你的问题:

Sub ArrayLoopExample()

Dim MyArray As Variant: MyArray = Array(43, 83, 87, 91, 92, 93, 98)

For i = 1 To 99
    For x = LBound(MyArray) To UBound(MyArray)

        If i = MyArray(x) Then

        'Skip

        Else

        'Some code

        End If

    Next x
Next i

End Sub
根据以下评论

更新

答案 3 :(得分:1)

扔掉我用字符串长度替换的东西并比较:

Sub LoopSkip()
     Dim NotUse As String
     NotUse = "41,83,87,91,92,93,98"
     For i = 1 To 99
        If Len("," & NotUse & ",") = Len(Replace("," & NotUse & ",", "," & i & ",", "")) Then
             'Do Stuff
         End If
     Next i
End Sub

答案 4 :(得分:1)

也许是更小的代码。如果这很有用。

not_use = Split("41,83,87,91,92,93,98",",")
For i = 1 To 99
    If UBound(Filter(not_use,CStr(i))) Then MsgBox i
Next

刚刚意识到你要求VBA而不是VBScript。我的坏。

答案 5 :(得分:1)

只是对上述答案已有的变化

Dim not_use As Variant, i As Integer
not_use = Array(43, 83, 87, 91, 92, 93, 98) ' create an array

For i = 1 To 99
    If IsError(Application.Match(i, not_use, 0)) Then
        ' do some cool stuff
    End If
Next