2009-03-02 114 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 

端功能