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を使うと、うまく動作しなかったのである。また関数が増えるとあとで読んだときにわかりくいのである。