2010-12-14 62 views
0

我有一个列,其标题范围为B1:C1。数据更像从合并范围读取值(Excel)

+ ---- + ---- +

|标题|

+ ---- + ---- +

| H2 | H3 |

+ ---- + ---- +

| 1 | 2 |

| 3 | 4 |

+ ---- ---- + +

我有一个名为RNG变量如

Set rng = Range("B1:C1") 

现在使用RNG变量,我想选择值 “H3” 或“2 “或”4“。我用下面的语法

rng.Offset(1,1).value 

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

+0

有什么意义?范围(“B1:C1”)。offset(1,1)IS范围C2:D2,但如果B1:C1合并,则它们的偏移量(1,1)为D2。如果不清楚,请尝试使用键盘:单击合并的单元格,按向右箭头,然后向下箭头。 – 2010-12-14 15:53:39

回答

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 
+0

虽然我改变了我的逻辑到soemthing但谢谢你的帮助:) – 2010-12-14 16:30:42

1

如果您确实需要使用合并的单元格,Excel在涉及来自合并单元格的偏移量时会出现此“问题”。在上面的例子中,单元格D2从B1偏移(1,1)是有意义的。

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

你有你的变量:

Set rng = Range("B1:C1") 

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

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

这样一来,你的第一偏移按行移动到B2,然后按列偏移到C2。