【问题标题】:Excel VBA: Iterating over Multiple RangesExcel VBA:迭代多个范围
【发布时间】:2016-07-19 21:01:51
【问题描述】:

我目前正在编写自动化目标搜索的代码,但遇到了语法问题。

我声明了 3 个变量:

Dim X as Range
Dim Y as Range
Dim Z as Range

Set X as Range(....)
Set Y as Range(....)
Set Z as Range(....)

For each cell in X,Y,Z
X.GoalSeek Goal:=Y, ChangingCell:=Z
Next cell in X,Y,Z

这是伪代码,但我希望它在 X、Y、Z 范围内的每个单元格中逐个迭代。

这些是列范围。

问题:如何让 X、Y、Z 范围内的每个单元格迭代以放入目标函数?因此,如果每个范围有 5 个单元格,它将运行 5 次。

【问题讨论】:

  • 里面可能藏着一个问题(某人)。你能帮我找到它,以便我们回答它:stackoverflow.com/tour

标签: vba excel


【解决方案1】:
  1. For ... Each 不允许在in 之后使用逗号分隔的参数,因此您必须为其提供“一个”范围...

  2. 如果您想说For Each cell ...,那么您必须使用它们的.Cells 属性将范围分解为单元格

  3. For ... Each 中,您应该使用循环变量 (cell) 而不是 XYZ

例子

Sub Test()
Dim X As Range, Y As Range, Z As Range
Dim C As Range

    Set X = [A1]
    Set Y = [B1:B2]
    Set Z = [C1:C3]

    For Each C In Union(X.Cells, Y.Cells, Z.Cells)
        MsgBox C.AddressLocal
    Next C
End Sub

Union(...) 的替代语法是

For Each C In Union(X, Y, Z).Cells

这可能更清楚地表明您将 3 个范围捆绑在一起,然后处理它们的每个单元格......也许是口味问题

编辑 假设您要形成(大小相等)范围的三倍并将它们输入到单个函数中,计算范围 Y 和 Z 到 X 上的偏移量

例子

Sub Test()
Dim X As Range, Y As Range, Z As Range
Dim C As Range
Dim OYR As Long, OYC As Long, OZR As Long, OZC As Long

    Set X = [A1:A5]
    Set Y = [B3]        'no need to provide full range, starting point will do
    Set Z = [C5]

    ' calculating offsets
    OYR = Y(1, 1).Row - X(1, 1).Row + 1
    OYC = Y(1, 1).Column - X(1, 1).Column + 1

    OZR = Z(1, 1).Row - X(1, 1).Row + 1
    OZC = Z(1, 1).Column - X(1, 1).Column + 1

    ' iterate thru all cells of X and their equally ofsett partners in Y and Z
    For Each C In X.Cells
        MsgBox C.AddressLocal & " " & C(OYR, OYC).AddressLocal & " " & C(OZR, OZC).AddressLocal
    Next C

End Sub

【讨论】:

  • 假设我想要 X + Y = Z 和 X = [A1:A5] Y = [B1:B5] Z = [C1:C5] 联合运算符允许我创建联合范围[A1:C1] 像这样?如何输入该范围内每个单元格的位置,以便在目标公式中使用?
  • 你的问题是遍历 3 个不同范围的所有单元格......在循环中,所有 3 个范围的每个单元格都“显示”为 C ...所以如果你想调用一个函数 @987654334 @ 对于每个单元格,您只需将 MsgBox ... 替换为 GoalSeek C
  • AAHH ...您的问题是为相等大小的范​​围形成 TRIPLES (A,B,C) 并将这些 TRIPLES 提供给函数吗?
  • 是的,很抱歉,我输入了太多内容,以至于我忘了问这个问题。偏移方法很棒。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多