0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ちょっとした工夫を取り入れたGASによる配列操作

Last updated at Posted at 2021-09-11

GASでsetValues()を使っていると、値を参照するときにData[0][5]みたいになってコードが読みづらいですよね。
今回は見栄えのよいデータ参照方法を考えてみました。
例えば下のようなスプレッドシートで人物データを取得する場面を考えてみます。
image.png

従来通り、setValues()を使った方法

シンプルにこんな感じでしょうか。

function getData() {
  const Sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
  const LastRow = Sheet.getLastRow(); // 最終行
  const StartCell = 7;

  // A7~F17までのデータを取得
  const UserValues = Sheet.getRange(`A${StartCell}:F${LastRow}`).getValues();
}

実際に取得したデータを確認してみると、こんな感じでした。
image.png

ちなみにUserValues[0]でデータを取得してみるとこんな感じです。
image.png

例えば1行目の涼風青葉さんの名前を参照する場合、UserValues[0][2]となります。
しかも今回はスプレッドシートのセルを結合しているので、UserValues[0][4]は空欄になってしまいます。
うーん、使いづらい。。

ちょっとだけ工夫してみた

pythonだと辞書型?GASだと連想配列?
呼び方はわからない(というか興味ない)ですが、少しは使いやすくなりました。

function getData() {
  const Sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
  const LastRow = Sheet.getLastRow(); // 最終行

  let userArr = [];
  const StartCell = 7;
  for (let i = StartCell; i < LastRow; i++) {
    userArr[i - StartCell] = {
      idnex: Sheet.getRange(`A${i}`).getValue(), // 番号
      flag: Sheet.getRange(`B${i}`).getValue(), // 参加有無
      name: Sheet.getRange(`C${i}`).getValue(), // 氏名
      address: Sheet.getRange(`D${i}`).getValue(), // メールアドレス
      note: Sheet.getRange(`F${i}`).getValue(), // 備考
    }
  }
}

実際に取得したデータはこんな感じでした。ぱっと見、あまり変わってませんね。
image.png

ちなみにさっきと同様userArr[0]でデータを取ってくるとこんな感じです。
image.png

取得データにkeyが付いているので、例えば葉月しずくを参照したいときは
userArr[1].nameもしくはuserArr[1]["name"]で取ってこれます。他の項目についても同様です。
nameで名前を指定できるので、ソースコードも少しはわかりやすくなるかもしれない。
一応スプレッドシートの結合部分になる不要データもないので、その辺は心配なし。

結論

好み。
私はsetValues()派。何故なら楽だから。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?