我需要遍历i = 1到99,但我想跳过一些特定的i值。 我想跳过的数字是41,83,87,91,92,93,98
我意识到我可以将所有操作嵌套在i <> 41
或i <> 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
中,但据我所知,没有办法写出来。
答案 0 :(得分:6)
您可以使用If
以Select 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