VBA for-loop,基数为2的增量

时间:2015-02-26 10:23:17

标签: vba for-loop

为了识别位掩码值的内容,我需要一个有效的VBA解决方案来迭代各种可能性(1,2,4,8,...跳过它们之间的任何东西)

现在我的唯一解决方案是遍历整个范围并检查当前迭代是否为基数2

For i = ErrorType.[_First] To ErrorType.[_Last]
  If isBase2(i) Then
    ...
  End If
Next i

我正在考虑这个Java代码片段

的内容
for(int i = 0; i < x; i = Math.pow(2, i++)) {
  ...
}

但是我还没有能够在VBA中复制它而不会导致无限循环。

2 个答案:

答案 0 :(得分:0)

在java中,请更多地考虑for (int i = 1; i <= x; i <<= 1)

这样,如果我们尝试将其转换为vba并记住vba中没有变化,我们可以通过将相同的逻辑重新构造为带有乘法的while循环来达到类似的效果:

Dim i As Integer
i = 1

Do While i <= x
    i = i * 2
Loop

我会记住,仅仅为了找到2的力量,战俘是相当昂贵的。只需在循环之前将0作为单独的大小写处理,并避免所有比较。无论如何,VBA并不是最有效的平台,所以保持简单通常是最佳选择。

答案 1 :(得分:0)

Dim pow As Long
Dim i As Long
For pow = -1 To 4 'or however high you want to go
    If pow = -1 Then
         i = 0 ' Special case: 0 isn't a power of 2
    Else
         i = 2 ^ pow
    End If
    Debug.Print i
Next pow