我有一个循环遍历每一列,并将值设置为它上面几行的R1C1总和。我正在使用for循环,但我想跳过几列,因为它们包含已在单元格中的公式。如何设置仅循环通过非连续集或数字的循环?
作为参考,我希望它循环通过第1列到第80列,但跳过第25,36,37,44,60,63,64,67,68,73,75和76列。
编辑:谢谢你们,但是我已经按照你所说的那样运作了;我正在寻找一种更短更优雅的方法。
编辑2:这甚至是VBA吗?!
答案 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
结束功能