考虑以下VBA MWE
Sub test()
Dim rng As Range
Set rng = Range("A:A, C:C")
Dim rRow As Range
For i = 1 To 5
Set rRow = Intersect(rng, rng.Cells(i, 1).EntireRow)
rRow.Value = 1
rRow.Cells(, 2).Value = 2
Next
End Sub
产生类似于此的输出
1 2 1
1 2 1
1 2 1
1 2 1
1 2 1
正如我们所看到的,行rRow.Value = 1
将第一列和第三列中的单元格设置为1.现在,我无法理解为什么rRow.Cells(1,2)
不会出现问题。 t访问第三列,使输出
1 2
1 2
1 2
1 2
1 2
并将第二列留空,因为这似乎是行rRow.Value = 1
中发生的情况。有人可以向我解释这个逻辑吗?
编辑:
评论rRow.Cells(,2).Value = 2
,使代码读取
Sub test()
Dim rng As Range
Set rng = Range("A:A, C:C")
Dim rRow As Range
For i = 1 To 5
Set rRow = Intersect(rng, rng.Cells(i, 1).EntireRow)
rRow.Value = 1
'rRow.Cells(, 2).Value = 2
Next
End Sub
产生以下输出
1 1
1 1
1 1
1 1
1 1
其中列A和C用1填充,而列B单独留下。
答案 0 :(得分:3)
使用Range
对象的Cells
或Range
属性(而不是更常见的Worksheet
),提供相对于左上角单元格的范围的引用原始范围。它不以任何方式限制在原始范围内的细胞。
因此:
Range("A1").Range("B2")
指的是右边一列和A1下面一行的单元格。这样做:
Range("A1:A10").Range("B2")
请注意,它仍然只引用一个单元格,即使原始范围是10个单元格。 Cells
的工作方式完全相同(就像使用Worksheet
父级一样)。所以这个:
Range("A1").Cells(2, 2)
和此:
Range("A1:A10").Cells(2, 2)
均指B2。