とあるお仕事でGoogleスプレッドシートおよびGoogle Apps ScriptでR1C1記法を使うことがありました。この投稿はその中で調べた事柄のまとめ記事になります。R1C1形式自体はGoogleスプレッドシート単体で使っていたことがあったのですが、Google Apps Scriptを使うことでより挙動の理解を深めることができたので、共有の意味も込めたエントリーです。
R1C1形式とは
A1形式とは、列をA,B,C…、行を1,2,3…と表示・指定する形式で
R1C1形式とは、列(Row)と行(Column)を数字で表示・指定する形式です。
R1C1ならA1セル、R1C2なら、B1セル、R3C3ならC3セルといった具合です。
エクセルでもGoogleスプレッドシートでも使えますね。
R1C1形式の使い所
A1形式の場合、行も列も連番的に処理をしたい場合、直感的ではありません。例えばBX列は何番目か即座にわかるかたはどのくらいいるでしょうか?指折り数えるのも辛そうです。もちろんスクリプトで連番を組むのもちょっと面倒です。
その点、R1C1形式だと行列が数値形式なので処理しやすいといったメリットがあります。例えば行だけでなく列方向にもループを回す場合ですね。列がアルファベットだと指差し数えたりスプレッドシート(エクセル)でカウントを使って番号確認したりとかしないといけないですが、数字であれば足し算引き算でいけます。
デメリットは私も正直そうですが、A1形式に比べたら全く慣れてません。初見だと正直面喰らいます。他のメンバーへの引き継ぎや共有を考えた時、多用しすぎているとちょっと辛いといったことがあり得るかもしれません。このあたりのバランス感は状況に応じて臨機応変にといったところになるでしょうか。
R1C1形式のつまづきポイント
相対参照と絶対参照
R1C1形式にも絶対参照と相対参照があります。A1形式だと$をつけて固定するやつですね。絶対参照の場合は、R1C1と指定すれば、A1を指すことになります。ややこしいのは相対参照です。R1C1形式で相対参照する場合はR[-1]C[-1]のように数値に括弧をつけます。そして、現在のセルに対しての相対位置を決める形になっているので今B2にいてR[-1]C[-1]としたらA1になりますし、今C3にいてR[-1]C[-1]としたらB2を指すことになります。
また、行/列のみを絶対/相対参照のように指定することもできます。
行列の関係
慣れれば大したことはないと思うのですが、A1形式は「列行」の順(Aが行、1が列)で表現されてますが、R1C1は「行列」の順(Rが行、Cが列)ですね。なので、A1からR1C1に変換もしくはR1C1で書いてA1でテストしようとする時に、行列置換は気をつけないといけない点です。
関係ないですが、たまに行列ってどっちが縦でどっちが横だっけ、聞かれたりしますが、漢字で行は横棒2本あるので横、列は縦棒2本なので縦、みたいにやったりしますよね。英語のRow, Columnからイメージでもよいと思います。
R1C1形式を実際に使ってみる
習うより慣れろ形式でいってみましょう!ということで、実際に色々ためしたスプレッドシートを用意しました。こちらからアクセスして頂き、ご確認ください。またコピーはこちらからもできます。参考までにどうぞ!
なお、筆者はGAS内でスプレッドシートの数式を制御する場合は、もっぱら本記事でご紹介したR1C1形式で対応をしています。数式を用いたGoogleスプレッドシートおよびGoogle Apps Script開発でお困りごとがありましたら、サポートできるかもしれません。こちらのお問合せページよりお気軽にご連絡いただければ幸いです。
参考サイト
How to use R1C1 Reference Style in Excel
Google スプレッドシートで セル参照にR1C1 形式を利用する
googleスプレッドシートのindirect関数でR1C1形式を利用する
「StiLL」デザイン情報148 StiLLコマンド–項目式にR1C1形式の数式を活用
R1C1参照形式って何のためにあるの?何が便利なの?
Google Apps Scriptで数列を記入する方法とR1C1形式について