对于具有非连续范围的循环

时间:2009-03-02 10:05:30

标签: excel vba

我有一个循环遍历每一列,并将值设置为它上面几行的R1C1总和。我正在使用for循环,但我想跳过几列,因为它们包含已在单元格中的公式。如何设置仅循环通过非连续集或数字的循环?

作为参考,我希望它循环通过第1列到第80列,但跳过第25,36,37,44,60,63,64,67,68,73,75和76列。

编辑:谢谢你们,但是我已经按照你所说的那样运作了;我正在寻找一种更短更优雅的方法。

编辑2:这甚至是VBA吗?!

6 个答案:

答案 0 :(得分:4)

学习C#答案的VBA版本: -

Dim col As Integer: For col = 1 To 70

    Select Case col

    Case 25, 36, 37, 44, 60, 63, 64, 67, 68, 73, 75, 76
        'do nothing'

    Case Else
        'do something'

    End Select

Next col

答案 1 :(得分:1)

我会做两件事之一。第一种是只执行特定循环数的主体:

for i = 1 to 70
    skipIt = false
    skipIt = skipIt or (i = 25)
    : : :
    skipIt = skipIt or (i = 76)
    if not skipIt then
        ' Put your body here. '
    end if
next

或者,你可以直接跳到下一个:

for i = 1 to 70
    if i = 25 goto nextIter
    : : :
    if i = 76 goto nextIter

    ' Put your body here. '
nextIter:
next

答案 2 :(得分:1)

你可以在你的循环开头放一个if,并跳过你不想迭代的列

答案 3 :(得分:1)

  for i = 1 to 70
  {
    switch (i)
    {
      case 25, 36, 37, 44, 60, 63, 64, 67, 68, 73, 75 76 : break;
      default : // process break;
    }
  }

答案 4 :(得分:1)

您可以设置一个包含您需要处理的列号的数组。

然后你的循环可以遍历数组值。

另一种解决方案是定义一个布尔数组,其中包含每列的值,并标记要跳过的列。在所有列的循环中检查布尔数组。

另一种解决方案是,如果您可以在循环中检测到该列是否是您需要跳过的列(通过检测那里的公式)。

答案 5 :(得分:0)

此方法使用Excel的范围对象功能。

使用Excel的UNION方法将您的范围定义为一系列不连续的列。

要加快循环,可以使用范围对象的SpecialCells方法缩小范围以仅包含包含公式的单元格。

函数LoopColumns()     昏暗的目标作为范围     昏暗的细胞作为范围

'根据所需列的联合创建范围对象     设定目标=联盟(范围(“A:D”),范围(“F:G”),范围(“J:L”),范围(“P:Q”))

'如果您只想处理公式,请再次缩小范围 'Excel将范围定义为仅包含公式的单元格     设置Target = Target.SpecialCells(xlCellTypeFormulas,1)

For Each Cell In Target.Cells
    'process cells here...
Next Cell

结束功能