Excel VBA:遍历多个范围

我目前正在编写一个自动化goalseek的代码,但是我遇到了语法问题。

我宣布了3个variables:

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的每个单元迭代放入goalseek函数? 所以如果每个范围有5个单元格,它会运行5次。

  1. For ... Each不允许逗号分隔的参数,所以你必须提出“一个”范围…

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

  3. For ... Each里面,你应该用循环variables( 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(...)其他语法Union(...)将是

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

这可能使得它更清晰地将3个范围连接在一起,然后解决他们的每个细胞…也许是味道的问题

编辑假设你想要形成你的(相等大小)范围的三重奏,并将其馈送到一个单一的function,计算偏移范围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