从合并范围读取值(Excel)

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

+ —- + —- +

| 标题|

+ —- + —- +

| H2 | H3 |

+ —- + —- +

| 1 | 2 |

| 3 | 4 |

+ —- + —- +

我有一个名为rng的variables,如

Set rng = Range("B1:C1") 

现在使用rngvariables,我想select值“H3”或“2”或“4”。 我用下面的语法

 rng.Offset(1,1).value 

而不是给我“H3”,它给了我从下一个柱子即d2的价值。

有没有一个简单的方法来解决这种意想不到的行为。 我的理解是,关于合并的单元格,偏移的参考是基于整个单元格的,合并的单元格被视为一个单元格而不是许多单元格。

在你的实例中,如果Range("B1:C1")被合并,那么下一列(即Offset(0,1) )就是D列.Excel将合并范围视为单个单元格,从视觉angular度看下一列是D列而不是 C列。在我看来,这可能是令人困惑的。

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

1)取消范围(“B1:C1”)

2)select范围(“B1:C1”)>格式>单元格

3)在水平对话框中select“中心select”

如果你这样做,那么下面的代码将工作:

 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 

如果你真的需要使用合并的单元格,Excel有这个“问题”,当涉及到合并单元格的偏移量。 在上面的例子中,单元格D2从B1偏移(1,1)是有意义的。

一种解决scheme是使用嵌套偏移量:

你有你的variables:

 Set rng = Range("B1:C1") 

然后使用下面的代码进行调整:

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

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