いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)A1/R1C1形式の参照文字列を相互に変換する

 Excelでセルを参照するときの参照文字列(セル番地)の形式としてA1形式とR1C1形式がありますが、それらの文字列を関数を使って互いに変換する方法についてです。

  • INDIRECT関数等を使って、A1形式とR1C1形式の参照文字列(セル番地)を互いに変換できます。

A1形式からR1C1形式に変換

 画像ではB列にA1形式の参照文字列が記録されています。
 一方でC列に関数を使った式を入力し、R1C1形式の参照文字列に変換しています。

 C3セル(下方にコピー)

="R"&ROW(INDIRECT(B3))&"C"&COLUMN(INDIRECT(B3))

 INDIRECT関数を使ってB3セルに記入されている文字列が示すセル(A1)を実際に参照し、さらにROW/COLUMN関数で評価することによってその行番号、列番号を取得しています。あとは&を使って「R」と「C」を足しています。
 ADDRESS関数を使う方法も考えられますが、文字を直接&でつないだ方がわかりやすいです。

R1C1形式からA1形式に変換

 次の画像ではB列にR1C1形式の参照文字列が記録されています。
 C列に関数を使った式を入力し、A1形式の参照文字列に変換しています。

 C3セル(下方にコピー)

=SUBSTITUTE(CELL("address",INDIRECT(B3,FALSE)),"$","")

 INDIRECT関数を使ってB3セルに記入されている文字列が示すセル(R1C1)を実際に参照し、さらにCELL関数を使ってA1形式の文字列を取得しています。
 絶対参照の「$」がつくのでSUBSTITUTE関数で消していますが、これを外せば「$」付きの文字列が得られます。

備考

 ADDRESS関数を使って行番号、列番号をR1C1形式の参照文字列に変換すると、「R[1]C[1]」のように角カッコ付きの文字列が得られます。
 しかしこれをINDIRECT関数で評価すると、そのINDIRECT関数が入力されているセルを起点とする相対位置(オフセット)が計算されて返ります
 次の画像では2番目の例と同じ式で「R[1]C[1]」という参照文字列をA1形式に変換していますが、式が入力されているセルがC3セルなので、そこから1行下、かつ1列右にあるセル番地「D4」が得られています。

 上記の例ではあくまで絶対的な位置、つまり「A1をR1C1とみなす場合の参照文字列」を求めることとしていますので、角カッコなしの文字列を求めています。