LoginSignup
0
0

More than 3 years have passed since last update.

GASでセルのデータを扱うときに、セルの列数と配列のインデックスが1ずれるのがややこしい問題

Last updated at Posted at 2019-02-08

課題

ss.png

というスプレッドシートのデータをGASで扱いたいとします。

  • スプレッドシートの世界では、A列の列数は1
  • GASの世界での2次元配列では、A列のindexは0

というのになかなか慣れませんでした。

さらに列数が多いスプレッドシートを扱うときに、「I列って8?9?」みたいな事になるし、
列が増減したときにコードを修正するのも「どこがどこだっけ?」ってなって困りました。

解決策

こんなの当たり前かもしれないし、もっといい方法があるかもしれないのであったら教えてほしいです!

修正前
function columnIndex_before() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('xxx');
  const data  = sheet.getDataRange().getValues();

  for (let i=1; i<data.length; i++){
    // data[i][0]ってなんだっけ?ってなる。
    Logger.log(data[i][0] + ":" + data[i][1] + ":" + data[i][2]);
  }
}
修正後
function columnIndex_after() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('xxx');
  const data  = sheet.getDataRange().getValues();

  // 列が追加・削除されたときも、ここだけ変えればfor文の中は変更しなくて良くなる
  const idIndex   = 0;
  const nameIndex = 1;
  const mailIndex = 2;

  for (let i=1; i<data.length; i++){
    // コード量は増えるけど認識しやすくなる
    Logger.log(data[i][idIndex] + ":" + data[i][nameIndex] + ":" + data[i][mailIndex]);
  }
}
実行結果
1:Aさん:a@example.com
2:Bさん:b@example.com
3:Cさん:c@example.com
4:Dさん:d@example.com
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0