Excel VBA构造嵌套for循环到引用表

时间:2014-09-16 14:49:29

标签: excel vba excel-vba

我有一个由一些数据构建的两个数据透视表(没有相同的结构),我需要使用其他一些表的笛卡尔积来比较每个条目。

我想在VBA中有一些嵌套的for循环,它根据我构建的一些列表从数据透视表中获取数据。

我的名单:

+------+-----+
| Date | ID  |
+------+-----+
| 9/1  | 123 |
| 9/2  | 124 |
| 9/3  | 200 |
| 9/4  | 201 |
|      | 202 |
|      | 300 |
|      | 500 |
|      | 999 |
+------+-----+

我无法弄清楚如何引用这些列表中每列中的每个条目以在命令中使用它们。我记得以下内容:

for each day in Date:
  for each num in ID:
    do_pivot_fetch(from pivot1, date=day, ID=num)

1 个答案:

答案 0 :(得分:1)

如果这些列表是在Excel中维护的(这就是我总是写这些东西的方式,那么在你需要的时候很容易改变参数),我通常使用do ... while迭代它们。你也可以尝试在每一行中找到最后一个填充的单元格,然后用它来计算for循环的范围,但我发现,鉴于人们喜欢使用excel电子表格做的事情,这样做会很糟糕。

因此,假设您在工作表'Params'中列出了A(日期)和B(ID)。假设您在第1行中有标题,并且在每个列表中的最后一个值之后有一个空行。然后你的代码看起来像这样:

Sub useParams()
Dim Date_val, ID_val As Range
With ThisWorkbook.Worksheets("Params")
    Set Date_val = Range("A2")
    Do While Date_val.Value <> ""
        Set ID_val = Range("B2")
            Do While ID_val.Value <> ""
               //do_pivot_fetch(from pivot1, date=Date_val.Value, ID=ID_val.Value)
               Set ID_val = ID_val.Offset(1, 0)
            Loop
        Set Dateval = Date_val.Offset(1, 0)
   Loop
End With
End Sub
相关问题