从合并范围读取值(Excel)

时间:2010-12-14 15:40:27

标签: excel vba excel-vba

我有一个标题为B1:C1范围的列。数据更像是

+ ---- ---- + +

|标题|

+ ---- ---- + +

| H2 | H3 |

+ ---- ---- + +

| 1 | 2 |

| 3 | 4 |

+ ---- ---- + +

我有一个名为rng的变量,例如

Set rng = Range("B1:C1")

现在使用rng变量,我想选择值“H3”或“2”或“4”。我使用了以下语法

rng.Offset(1,1).value

并且不给我“H3”,它给了我下一列的价值,即d2。

2 个答案:

答案 0 :(得分:3)

没有一种直接的方法来解决这种意外行为。我的理解是,对于合并的单元格,偏移的引用基于整个单元格,并且合并的单元格被视为一个单元格而不是许多单元格。

在您的实例中,如果合并Range("B1:C1"),则下一列(即Offset(0,1))为D列.Excel将合并范围视为单个单元格,因此从可视角度来看,下一列是列D和列C.在我看来,这可能会令人困惑。

解决此问题的最佳方法是避免将合并的单元格用作标题,而是使用Centre Across Selection格式:

1)去合并范围(“B1:C1”)

2)选择范围(“B1:C1”)>格式>细胞

3)在水平对话框中选择'中心选择'

如果您这样做,那么以下代码将起作用:

Sub GetOffsets()
    Dim rng As Range
    Set rng = Range("B1")

    Debug.Print rng.Offset(1, 0) // H2
    Debug.Print rng.Offset(2, 0) // 1
    Debug.Print rng.Offset(3, 0) // 3
    Debug.Print rng.Offset(1, 1) // H3
    Debug.Print rng.Offset(2, 1) // 2
    Debug.Print rng.Offset(3, 1) // 4
End Sub

答案 1 :(得分:1)

如果您确实需要使用合并单元格,那么当涉及到合并单元格的偏移时,Excel会出现这个“问题”。在上面的例子中,单元格D2从B1变为偏移(1,1)是有意义的。

一种解决方案是使用嵌套偏移:

你有你的变量:

Set rng = Range("B1:C1")

然后对您的代码使用以下调整:

rng.Offset(1,0).offset(0,1).value

这样,你首先按行偏移,向下移动到B2,然后按列偏移到达C2。