見出し画像

GASでスプレッドシートから対象シートを取得するときの実行速度

スプレッドシートを取得するときの実行速度を検証したので、その後のシート取得でもどれが一番早いのか試してみる。

計測方法

一番誤差の少ないgetActiveSpreadsheet()でシートを取得し、対象の処理を500回繰り返したときの平均値を取る。

function myFunction() {
  for (let i = 1; i <= 5; i++) {
    console.time(`計測${i}回目`);
    const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    for (let j = 0; j < 500; j++) {
      // シート取得を実行する
    }
    console.timeEnd(`計測${i}回目`);
  }
}

計測結果

  • getActiveSheet(); ▶︎ 432.2 ms 👑

  • getSheets()[0]; ▶︎ 583.2 ms

  • getSheetByName('**********'); ▶︎ 464.4 ms

実行内容とコメント

アクティブなシートを取得する

スプレッドシート取得と同じく、即席でGASを書いて楽したいなくらいのときにしか使っていないやつ。
結果:平均 432.2 ms

function myFunction() {
  for (let i = 1; i <= 10; i++) {
    console.time(`計測${i}回目`);
    const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    for (let j = 0; j < 100; j++) {
      spreadsheet.getActiveSheet();
    }
    console.timeEnd(`計測${i}回目`);
  }
}

全シートを取得し要素数指定でシートを取得する

シートが一つしかないときとかは自明なのでこの取得方法で書いたりする。
ちなみにgetSheets()の戻り値はシートの作成順ではなくスプレッドシート上の左シートから順番に格納される。複数シートある場合は、シートの位置によって違うものが取得されてしまうので注意が必要。
結果:平均 583.2 ms

function myFunction() {
  for (let i = 1; i <= 5; i++) {
    console.time(`計測${i}回目`);
    const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    for (let j = 0; j < 500; j++) {
      spreadsheet.getSheets()[0];
    }
    console.timeEnd(`計測${i}回目`);
  }
}

名前指定でシートを取得する

個人的には可読性が高いので一番使う。
こちらもシート名を変更すると取得できなくなるので注意。(私はシート名を変更することがないのでそんなに問題視していない点。)
結果:平均 464.4 ms

function myFunction() {
  for (let i = 1; i <= 10; i++) {
    console.time(`計測${i}回目`);
    const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    for (let j = 0; j < 100; j++) {
      spreadsheet.getSheetByName('シート1');
    }
    console.timeEnd(`計測${i}回目`);
  }
}

スプレッドシートの取得は、ID指定やURL指定よりアクティブなものをとってくる方が処理が早かったのでシート取得も同じ結果かな?と予測していたが前回ほど差は開かなかった。
getActiveSheet()が使えるときはそれ優先で、それ以外のときはgetSheetByName()にしようかな。

この記事が気に入ったらサポートをしてみませんか?