R1C1方式
ちょっとしたExcelネタ
この間、会社の上司の方に、こんな事を聞かれました。
「マクロでセルを参照させたいのだけど、たとえばセルA1に『A1』と入力してセルB1にR1C1方式で『A1』を表現したい」
つまり、A1セルに「A1」と入力したらB1セルに「R1C1」と表示したいと言う事。
「A1」を「B2」とか「C3」とかに変更したら、B1セルには
・セルA1「B2」→セルB1「R2C2」
・セルA1「C3」→セルB1「R3C3」
というように、セルの名前で変動させたいという事でした。
となると最初に思いついたのが
INDIRECT関数
です。
INDIRECT関数は参照関数です。
機能はそのまま。指定した値(セル範囲)を参照するという関数です。
たとえば
=INDIRECT(A1)
という式をB1セルに入れたら、A1セルに入力された「A1」という文字が返されます。
つまり、A1という文字をセルの名前として認識し、そのセルに入っている値を返したと言う事です。
しかしですね。これでは上司の希望は叶わないわけです。
参照したセルを「R1C1」方式での表示を必要としてるわけですから・・・
で、思いついたのが「ROW」関数と「COLUMN」関数です。
これも参照関数です。
ROWとは「行」の事で、「COLUMN」は「列」の事です。
たとえばROW関数なら
=ROW(A1)→「1」となります。A1セルは1行目にあるからです。
=ROW(A3)→「3」となります。A3セルは3行目にあるからです。
COLUMN関数の場合は
=COLUMN(A1)→「1」です。A1セルは1列目にあります。
=COLUMN(C1)→「3」です。C1セルは3列目にあります。
とまあこんな感じですね。
そこへセルを具体的に参照するINDIRECTを組み込むと
「A1セルに『A3』と入力されている」という条件では
=ROW(INDIRECT(A1))→「3」となります
=COLUMN(INDIRECT(A1))→「1」となります
ここまでくると、あとはこれに「R」と「C」をつけるだけ!
と言う事で、解答
="R"&ROW(INDIRECT(A1))&"C"&COLUMN(INDORECT(A1))
で「R3C1]と表示されるわけですね。
これを上司に教えましたところ、希望は叶ったとの事でした。
ふだんは使わないであろう関数ですが、関数を作る際の考え方の参考になればと思います。
0コメント