Ameba Ownd

アプリで簡単、無料ホームページ作成

紗希's Excel

R1C1方式

2016.04.05 04:55

ちょっとした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]と表示されるわけですね。

これを上司に教えましたところ、希望は叶ったとの事でした。

ふだんは使わないであろう関数ですが、関数を作る際の考え方の参考になればと思います。