创建一个可变大小的组以在Excel 2003中循环的好方法是什么?

时间:2008-12-07 22:58:32

标签: excel vba loops excel-vba excel-2003

我有一个针对很多项目运行的程序,跳过某些不符合标准的项目。然而,我然后回去为第一遍中错过的一些人运行它。我目前通过手动为每个人重新运行程序来做到这一点,但理想情况下会更像一个解决方案。

我的老板建议可能有效的东西是创建一个列表(如数据 - >列表),其中包含相关项目的名称,然后迭代列表。可悲的是,我的帮助文件似乎让我失望了 - 我不知道我是不知道该找什么,或者是什么。

运行“生成宏”命令显示首先创建列表的VBA沿着行 ActiveSheet.ListObjects.Add(xlSrcRange,Range(“$ A $ 1”),, xlYes).Name =“List1”

不幸的是,我似乎无法弄清楚如何用结果列表做事。我正在寻找

的循环
For Each ListItem in List 
    Run the procedure on the text in ListItem.Value
Next ListItem

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

也许就是这些问题:

Dim Counter 'module level '

Sub RunSomeProc()
    Counter = 0
    '1st test '
    SomeProc

    '2nd Test skipped items'
    For Each c In Range("c1:c" & Counter)
        SomeProc
    Next

End Sub

Sub SomeProc()
For Each c In Range("NamedRange1")
    If SomeTest=SomeVal Then
        'Write to 2nd test range '
        Range("C1").Offset(Counter, 0) = c 'Value of cell'
        Counter = Counter + 1
    End If
Next
End Sub

答案 1 :(得分:0)

你可以用这种方式迭代它:

set rgList = Range("name_of_range")    
For i = 1 To rgList.Rows.Count
  ' Do something using rgList.Cells(i, 1)
  RunProcedure(rgList.Cells(i, 1))
Next i

我在这里假设范围在列上;它是连续的,你应该在第二个索引上完成迭代 当然,可能有更好的方法来迭代范围;我在一个小脚本上使用这个,并且工作得非常好。

答案 2 :(得分:0)

我最终的解决方案是将列表导入为外部数据查询,然后我很好地命名并作为范围引用。所以:

For each item in Sheets("Sheet1").Range("Range1")
    Do stuff
Next item