Excelマクロ R1C1参照形式利用時のLookupに注意しましょう

ほぼ1日、上記の参照のさせ方にやられてしまいました汗

VBAを書いていたのですが、Range.FormulaR1C1Local内にVLOOKUPを記載した際に、エラーに出くわしました。

問題になったのは以下のようなケース。
列結合や動的にシート名を取ってきたいようなケースでのLookupの場合において、Range.FormulaR1C1Localを利用してVLOOKUP文を書こうとしたのです。

【マクロでのゴール】

f:id:mohessu:20180408023012p:plain

取得元はこんな感じです。

f:id:mohessu:20180408023025p:plain

マクロで動的にシートを指定するのと同時に、相対位置を利用して情報を取得しようとしました。すると、、、

f:id:mohessu:20180408023156p:plain

マクロのコンパイルは通りますが、#NAME?と表示され意図した形にならず、、、
どうも、A1形式で記載した部分がアポストロフィで囲われてしまうため、おかしな表記になるようでした。

f:id:mohessu:20180408023410p:plain

この事象、理屈を考えるとあまり難しいことではなく、
R1C1参照とA1参照を混ぜたことに起因して発生したようです。
この状態をなくすには、全部参照をA1参照に変えてあげることで回避可能です。

以下のように、ActiveCellなどを利用して、アドレスを割り出していきましょう。

f:id:mohessu:20180408024828p:plain

この形で対応すると、以下のように絶対参照にはなるものの、やりたいことが実現できました。

f:id:mohessu:20180408024955p:plain

VBAの世界では一般的な事象なのかもしれませんが、あまり触っていないこともあり、かなりはまってしまいました。

参照系は奥が深そうですね。。。

ところで、Office365 Proplusで久々にマクロを書いていたのですが、いまだに日本語でのマクロ入力ができないようですね。
シート名を日本語にしていたら、文字化けだらけになってしまいました。

日本語リストと打ち込んだら以下のような表記に。マクロを書くときには注意が必要ですね。

f:id:mohessu:20180408025539p:plain

音楽:Doggy Dog