For ... Each 不允许在in 之后使用逗号分隔的参数,因此您必须为其提供“一个”范围...
如果您想说For Each cell ...,那么您必须使用它们的.Cells 属性将范围分解为单元格
在 For ... Each 中,您应该使用循环变量 (cell) 而不是 X、Y、Z
例子
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