【发布时间】: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)等检查值或嵌套 ifif ... 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