Excel VBA:范围和单元格的意外结果

Excel VBA:范围和单元格的意外结果,excel,range,cells,vba,Excel,Range,Cells,Vba,我正在使用Excel 2013。在我的代码中,我提到我必须处理Excel工作表中的典型数据。例如: **Names** Ann Jim Tom Liz 当引用数据集中的特定单元格时,我不想在代码中包含+1 也就是说,为了得到“安”,我宁愿使用 Cells(1,1) 因此,我定义了一个不包括标题的范围: Set R = Range(Cells(2,1),Cells(5,1) 现在这句话指的是“安” 接下来,

我正在使用Excel 2013。在我的代码中,我提到我必须处理Excel工作表中的典型数据。例如:

    **Names**  
       Ann  
       Jim  
       Tom  
       Liz  
当引用数据集中的特定单元格时,我不想在代码中包含+1

也就是说,为了得到“安”,我宁愿使用

Cells(1,1)

因此,我定义了一个不包括标题的范围:

Set R = Range(Cells(2,1),Cells(5,1)
现在这句话指的是“安”

接下来,我想引用范围R中的“子范围”:

但令人惊讶的是,现在,我得到的不是预期的“Jim”和“Tom”(在我的范围R中是第二到第三个单元格),而是“Ann”和“Jim”(在Excel工作表中是第二到第三个)

有人能提供一些关于我在这里缺少什么的见解吗


谢谢

这是一个典型的不遗传亲子关系的案例。
R.Range内的
单元格
(单元格(2,1),单元格(3,1))
不知道它们属于
R
,因此它们默认为
R
所在的工作表,甚至可能不是该工作表(下标超出范围错误会带来更多问题)

这是遗传亲子关系的最简单方式。请注意,
.Cells
和not
Cells
用于传递引用。也可以写成,

    debug.print R.Range(R.Cells(2,1), R.Cells(3,1)).address
样本子:

Sub Unexpected_result_with_Range_and_Cells()
    Dim R As Range

    Set R = Range(Cells(2, 1), Cells(5, 1))
    Debug.Print R.Address
    Debug.Print R.Cells(1, 1).Value

    With R
        Debug.Print .Range(.Cells(2, 1), .Cells(3, 1)).Address
        Debug.Print .Cells(2, 1).Value
        Debug.Print .Cells(3, 1).Value
    End With

End Sub
来自VBE即时窗口的结果:

$A$2:$A$5
Ann
$A$4:$A$5
Jim
Tom

很抱歉,事实并非如此。这是我的第一个想法,但在包含了对“R”的引用(顺便说一句,我编辑了上面的代码)之后,行为仍然是一样的<代码>$A$4:$A$5是
Tom
Liz
但是
R.Range(R.Cells(2,1),R.Cells(3,1))
应该是
Jim
Tom
。顺便说一句,我真的很感谢你的帮助
with R
    debug.print .Range(.Cells(2,1), .Cells(3,1)).address
end with
    debug.print R.Range(R.Cells(2,1), R.Cells(3,1)).address
Sub Unexpected_result_with_Range_and_Cells()
    Dim R As Range

    Set R = Range(Cells(2, 1), Cells(5, 1))
    Debug.Print R.Address
    Debug.Print R.Cells(1, 1).Value

    With R
        Debug.Print .Range(.Cells(2, 1), .Cells(3, 1)).Address
        Debug.Print .Cells(2, 1).Value
        Debug.Print .Cells(3, 1).Value
    End With

End Sub
$A$2:$A$5
Ann
$A$4:$A$5
Jim
Tom