それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Google Apps Scriptで、セルのK3の参照を出す。カラムの番号( col ) をアルファベットの参照に変える

ColumnとAddressの相互変換

K3 をはそのまま取得できるが 逆が難しい。

getRange( 'K3' )

getRange でアルファベットを使った、相対(絶対)参照をつかってスプレッドシートの領域を取れるのだが、逆に、セルを参照形式に変換するのが、頭を悩ませた。

K3 セルを取るには、どうすればいいんですか?

getRange( 3,10 ) //=> 'K3' にしたい

なのだけど、colum K = col:10 を変換するのが大変。アルファベットのA-Zまでならいいけど、AA-ZZまでくるともう大変だった。

Column番号を、アルファベットに変更

アルファベットの「文字」に変換する。適当なセルに一時的に=ADDRESS(3,10,4) を書き込めば K3が取れる

  findStartColLetter(sheet,col) {
    let tmp = sheet.getRange(1000, 1, 1, 1);// 適当な
    tmp.setValue('=ADDRESS(3,' + col + ',4)')
    let a = tmp.getDisplayValue();
    tmp.clear();
    return a[0];
  }

文字にするには、とりあえず ADDRESS 関数に掛けるのが速いのだが。ADDRESS関数を使った結果を取らないといけない。でもAddressに相当するGAS の関数が見当たらない。仕方ないので、ADDRESSを適当なセルに書き込むことに。

なぜアルファベットのカラム名が必要なのか。

getRange で、数字でアクセスできるのに、なぜ文字列を使ったセル参照名に変える必要があったのか。 それは、条件付き書式の計算である。

条件付き書式を読みやすく指定する。

条件付き書式に AddressやINDIRECTを使うと、うまく動作しなかったのである。また関数が増えるとあとで読んだときにわかりくいのである。

その他のGASの記事

Goole App Script ( GAS ) を始める。記事一覧 - それマグで!