2009-03-02 112 views
0

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

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

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

编辑2:那就是VBA?!

+0

哪里是乔尔Spolsky的,当你需要他。 – 2009-03-02 10:07:54

+0

谁说我们需要他? – Ikke 2009-03-02 10:32:43

+0

我是唯一一个注意到Q'er想从1重复到70但跳过73,75和76的人? – paxdiablo 2009-03-02 11:52:07

回答

4

一个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

我会做两件事之一。第一种是仅执行机构具体环数:

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 
1

,你可以在你的循环的开头放一个,如果和跳过你不想通过学习的C#的答案

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; 
    } 
    } 
1

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

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

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

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

0

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

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

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

功能LoopColumns() 弱小目标作为范围 昏暗的小区范围

'创建列您想根据联盟的范围对象 设置目标=联盟(范围(‘A:d’) ,范围(“F:G”),范围(“J:L”),范围(“P:Q”))

'如果您只想处理公式,请再次减小范围,但要有 'Excel将范围定义为仅包含公式的单元格 设置目标=目标。SpecialCells(xlCellTypeFormulas,1)

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

端功能