【GAS】スプレッドシートで列番号ではなく先頭行の項目名で指定するちょっとしたテクニック
スプレッドシートをしばらく運用していると、途中で列を追加しなければならない事態になったりします。もしGASで随所に列番号指定していたりすると補修工数が半端ありません。データベースのように項目名で列を指定したいところです。
Google Apps Scriptの場合、項目行を配列化することで簡単に列番号をゲットできます。この悩みはExcelでも同じですがExcelマクロよりシンプルなコードで実現可能です。
こんなシートがあったとします。1行目に項目行、2行目以降がデータ行となります。例えば住所はE列(5列目)にありますが、プログラミングしていく中で「5」と固定化してしまうと列を増やすたびに改修が必要になってしまいます。
その解決策として以下のように「住所」で引っ掛けるテクニックを使うわけです。まず、項目行である1行目を配列化し、indexOfメソッドで「住所」の要素番号を検索できます。配列の内容をindexOfで簡単に検索できるところがいいですね。インデックスの先頭が0なので注意。
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1'); var header = sheet.getRange("1:1").getValues(); console.log(header[0].indexOf('住所')+1);
結果はご覧の通り5列目であることを検知できました。
列番号からアルファベットの列名に変換したい場合は以下をご覧ください。
スポンサーリンク