2010-12-14 8 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 

と私を与えることのisnteadを使用し、「H3」は、それは私に次のcolumのすなわちd2とから値を与えました。

+0

ポイントは何ですか? (B1:C1)。オフセット(1,1)IS範囲C2:D2ですが、B1:C1がマージされている場合、オフセット(1,1)はD2です。クリアしていない場合は、キーボードで試してください。マージされたセルをクリックし、右矢印、下矢印を押します。 –

答えて

3

この予期しない動作を修正する簡単な方法はありません。私の理解では、マージされたセルに関して、オフセットのリファレンスはセル全体に基づいており、マージされたセルは多くのセルの代わりに1つのセルとして扱われるということです。インスタンスで

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に私のロジックを変更しましたが、あなたの助けに感謝:) –

1

実際にマージされたセルを使用する必要がある場合、Excelはマージされたセルからのオフセットに関してこの「問題」を持ちます。上のケースでは、セルD2がB1からのオフセット(1,1)になります。

一つの解決策は、ネストされたオフセットを使用することです:

あなたの変数を持っている:

Set rng = Range("B1:C1") 

次に、あなたのコードに以下の調整を使用します。

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

この方法は、あなたが最初のオフセット行ごとにB2に移動し、次に列にオフセットしてC2に移動します。

関連する問題