スプレッドシート操作_実践編(GASの学習_6)

この連載では僕が所属しているノンプロ研で受講した、GAS初級講座での気づきをまとめています。前回の記事はこちらです。

hirocom777.hatenadiary.org

前回はスプレッドシート操作の基本について学びました。スプレッドシート、シート、 セル範囲の取得や、セルの値の設定、取得などについてご紹介しました。

今回も引き続きスプレッドシート操作(実践編)について取り組みます。

Arrayオブジェクト

Arrayオブジェクトとは配列のことを指します。配列もオブジェクトなのです。よって 、配列の操作、確認などの作業はメソッド、プロパティで行います。前回、複数のセル範囲を指定して読み書きをする場合には、2次元配列を使用するとお話しました。Arrayオブジェクトを操作することで、スプレッドシート上のデータも色々な処理ができます。

以下に代表的なプロパティ、メソッドを御紹介します。

lengthプロパティ

配列の要素数を取得します。

Arrayオブジェクト.length

includesメソッド

配列内を検索して値が存在するかどうかをブール値で返します。

Arrayオブジェクト.includes(値)

indexOfメソッド

配列内を検索してその位置を取得します。値が存在する場合は0以上の整数、存在しない場合は-1を返します。

Arrayオブジェクト.indexOf(値)

flatメソッド

配列の次元を減らします。以下は使用例です。

//2次元配列にflatメソッドを使用する
const numbers = [[10, 30], [20], [40]].flat();
//1次元の配列に変換される。
console.log(numbers); 
//[10, 30, 20, 40]

pushメソッド

配列の最後尾に要素を追加します。以下は使用例です。

members = ['Bob', 'Tom', 'Jay'];
members.push('Dan');
console.log(members); 
//['Bob', 'Tom', 'Jay']

shiftメソッド

配列の先頭から要素を抜き出します。以下は使用例です。

members = ['Bob', 'Tom', 'Jay'];
members.shift();
console.log(members); 
//['Tom', 'Jay']

pushメソッド、shiftメソッドは操作するオブジェクトに変更を加えるメソッドです。使用する場合は、元の配列の複製を作ってから操作した方が確実ですね。

配列によるデータ処理

ここまでご紹介した方法で、配列を使ってスプレッドシート上のデータを処理していくのですが、配列を使用した方法にはほかにもメリットがあります。配列を使用した場合の方が処理時間が短くて済みます。

以下のコードを実行して比べてみましょう。「console.time(label);」は時間測定の開始、「console.timeEnd(label);」は時間測定の終了と結果の表示をします。

まずはセルから1つずつデータを取ってくる方法です。

console.time(label);
const sheet = SpreadsheetApp.getActiveSheet();
for(let i = 1; i <= 1000; i++) {
  for(let j = 1; j <= 5; j++) {
    const value = sheet.getRange(i, j).getValue();
    console.log(value);
  }
}
  console.timeEnd(label);

僕の環境では、23459msかかりました。結果の表示をしない場合は12183msでした。 続いて配列を使って同じ量のデータを取ってきた場合です。

console.time(label);
const sheet = SpreadsheetApp.getActiveSheet();
const values = sheet.getRange(1, 1, 1000, 5).getValues();
console.log(values);
console.timeEnd(label);

今度は、195msでした(結果を表示しない場合は170ms)。この様に配列を使ってシートの読み書きをすると、短時間で処理できます。GASには1実行あたり6分という厳しい壁があるので、この手法を使わない手はないです。

次回はHTTP通信・API

いかがでしょうか。前回の内容も含めて、スプレッドシート上のデータを処理する方法が分かってきたと思います。次回はHTTP通信・APIです。ネットを通じて他のアプリと通信したりします。お楽しみに!!

hirocom777.hatenadiary.org GAS関連記事まとめ - HiroCom777の学習記録