用于非连续范围的循环

我有一个遍历每一列的循环,并将其值设置为一个R1C1总和上面的几行。 我正在使用for循环,但是我想跳过几列,因为它们包含已经在单元格中的公式。 我怎样才能设置一个循环,只循环一个非连续的一组或多个数字?

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

编辑:谢谢你,但我已经得到了你所描述的工作; 我正在寻找一个更短,更优雅的方法。

编辑2:这是甚至VBA?

学习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 

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

 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 

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

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

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

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

另一个解决scheme是为每一列定义一个值为布尔值的数组,并标记要跳过的列。 在遍历所有列的循环中检查布尔数组。

另一个解决scheme是,如果你能在循环中检测列是否是你需要跳过的列(通过检测那里的公式)。

这种方法使用Excel的范围对象function。

使用Excel的UNION方法定义范围,使其成为一系列不连续的列。

为了加速循环,可以使用Range对象的SpecialCells方法减小范围,使其只包含那些包含公式的单元格。

函数LoopColumns()Dim Target As Range Dim Cell As Range

设置目标=联合(范围(“A:D”),范围(“F:G”),范围(“J:L”),范围(“P :Q“))

'如果您只想处理公式,请再次减小范围,但是'Excel将范围定义为仅包含公式Set Target = Target.SpecialCells(xlCellTypeFormulas,1)

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

结束function