【问题标题】:VBA For Each loop several rangesVBA For Each loop 几个范围
【发布时间】:2015-11-23 00:18:14
【问题描述】:

这里是 VBA 初学者。

我有 3 个我想要运行的动态命名范围,每个都有相同数量的条目。 目前,我正在逐个循环:

For Each M in worksheets(x).Range("Range1")
    For Each N in worksheets(x).Range("Range2")
        For Each O in worksheets(x).Range("Range3")
            IF ( Depends on M) Then
                (Does things to ranges N and O)
            End IF                
        Next
    Next
Next

但是这些中的每一个中的值都匹配,因此其中大部分是不必要的 - 这最多循环 80^3 次,而实际上只需要 80 次,因为数据在范围之间匹配。

所以我想要一个循环遍历 Range1 中的所有 Ms(例如),并以相同的速率遍历 Ranges 2 和 3 中的行: 所以它会考虑 M(1),N(1),O(1),然后一直到 M(2),N(2),O(2) 等,直到它碰到一个空单元格Range1(结束 - 它的动态),它应该停止。

我希望这是有道理的。

【问题讨论】:

  • 使用单个循环并使用 if M(1) = N(1) and N(1)=O(1) and M(1) = O(1) 等检查值或嵌套 if if ... then else if ... then ... else ... end if
  • If 什么 Depends on M???
  • @PaulOgilvie If M(i) = "specific value" then:... else if non empty, do something else. (对于问题的目的来说并不重要)
  • @psychicebola 对不起,我应该更清楚,N 和 O 是基于 M 的 excel 范围,它们不相等。它们根据 M 采用的值设置在循环中(然后是中间的其他数据 - 我已经全部排序)。基本上我想要的是如果循环查看 range1 的第 i 行,它只需要查看其他 2 个范围的第 i 行。

标签: vba excel for-loop foreach


【解决方案1】:

您必须以某种方式将 M 中的信息链接到 N 和 O 的范围。从您的代码中不太清楚这些是如何链接的,但如果行相同,您可以执行以下操作:

For Each M in worksheets(x).Range("Range1")
    IF ( Depends on M) Then
        Do something to RangeN.Rows(M.row) 
        Do something to RangeO.Rows(M.row) 
    End IF                    
Next

【讨论】:

  • 这看起来可以做到。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
相关资源
最近更新 更多