どハマリ・・・
オフセットは便利なんだけど曲者だった。
Excelでオフセット参照をしようとして、悩みに悩んだ話w
オフセットって何よってところから・・・
オフセットって何?
オフセットって、ざっくり言うと相対位置を参照する時に使うものっていう認識でいいのかな?
だから、A1セルを選択しているときのオフセットで2列2行を参照しようとすると、C3セルになる。
これは、感覚的にも分かりやすいかな。
縦横方向の相対位置だから、C3セルを基準にすると、
B2セルは「-1,-1」だし、
D4セルは「1,1」。
B3セルは「0,-1」となる。
Excel上では、下方向にプラス、右方向にプラス、その逆はそれぞれマイナスとなる。
まぁ、Excelの場合、画面の下を向いて、いくつセルを移動すればいいのか?みたいな感じ。
結合が絡むとややこしくなる
理屈が分かれば別にややこしくないんだけど、結合したセルが絡んだ時に同じオフセットで異なるセルを参照することになる。
先ほどと同じようにC3セルを選択した状態で、オフセットを表示してみると。
分かりやすいように罫線で囲ったけど、D4~E5セルは結合してあります。
多分、表示しているオフセットも予想通りだったかと。
では、次のパターン。
次は、結合したセルD4:E5のセルを選択した状態で、オフセットを表示します。
どうでした?
予想通りでしたか?
自分は、予想通りじゃありませんでした。
多分、間違えた人は、赤線で引いたセルがずれてたかと。
オフセットの考え方
あくまで、セルからの相対位置なので、
みたいな場合に気をつける必要があります。
左上のセルは、D4セルからの相対位置。
(これは、基本的に間違えない)
右上のセルはE4セルからの相対位置。
同じく、
右下のセルはE5セルからの相対位置。
左下のセルはD5セルからの相対位置。
となります。
まとめ
これを知らずにオフセットで値を取得しようとしたり、値をセットしようとすると、値を正しく取得できないし、正しくセットすることができません。
っていうか、自分がどハマリしてましたw
これ、結合だらけのExcelフォーマットを使う時なんかは、何がどこだか分からなくなる可能性が高いので、気をつけたいところ。
相対参照って、便利は便利で割りと使うんだけど、こんなはまり方をするとは思わなかった・・・
今回はExcelのマクロでは無く、C#からExcelへ出力するプログラムを作っている最中にぶち当たってしまい、2時間ほど悩んでましたね。
Excelのマクロでやるときも理屈は同じなので、自分のメモのためにも整理を兼ねて記事にしました。