0
2

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.

setValue()よりもsetValues()の方が格段に速い

Last updated at Posted at 2021-09-06

GASでスプレッドシート内のデータを取得して貼り付ける時、setValue()とsetValues()があるのはご存知かと思います。今回はこの2つの実行速度を比較していきたいと思います。
測定方法はシンプルで、1,000行のデータをいかに速くペーストできるかを競います。
image.png

#①setValue()を使って貼り付け
詳細な解説は省きますが、簡単に言うと下記手順を実施しています。

  1. getValue()で1セル分のデータを取得
  2. setValue()で、1.で取得したデータを貼り付ける
  3. 1.~2.を1,000回繰り返す。
paste.gs
//---------- ペースト関数 ----------
function pasteValues() {
  // 現在のシートを取得
  const Sheet = SpreadsheetApp.getActiveSheet();
  // シートの最終行を定義
  const LastRow = Sheet.getLastRow() + 1;

  // ☆☆☆☆☆☆☆☆☆ 1つずつ貼り付け ☆☆☆☆☆☆☆☆☆
  let value = "";
  for (let i = 2; i < LastRow; i++) {
    value = Sheet.getRange(`A${i}`).getValue();
    Sheet.getRange(`B${i}`).setValue(value);
  }
  // ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
}

#②setValues()を使って貼り付け
setValues()を使う際、引数は2次元配列にしてください。
※getValues()でデータを取得した時点で2次元配列になっていますが、getValue()で取得した場合は1次元配列になってしまいますのでご注意を。
setvalues()とgetValues()の使い方はググればわかりやすい記事がたくさん出てきますので、そちらをご参考に。

paste2.gs
//---------- ペースト関数 ----------
function pasteValues2() {
  // 現在のシートを取得
  const Sheet = SpreadsheetApp.getActiveSheet();
  // シートの最終行を定義
  const LastRow = Sheet.getLastRow() + 1;

  // // ################### 一気に貼り付け ###################
  const ValueArr = Sheet.getRange(`A2:A${LastRow}`).getValues();
  Sheet.getRange(2, 2, ValueArr.length, ValueArr[0].length).setValues(ValueArr);
}

#実行速度比較
①と②の実行速度ですが、結論から申し上げますと②の方が断然早いです。
試しにそれぞれの検索方法で5回処理を行い平均値を出してみたところ、次のような結果になりました。
①:168,211.4[ms] → 約168秒
②:320[ms] → 約0.3秒

1000行のコピペでは500倍以上の差が出ました。
参考までに、②の方法で200,000行のデータを貼り付けしたところ、約18秒でした。
setValues()は優秀。

#まとめ
setValues()のエラーが出まくっていた時期もありましたが、慣れれば使いやすいです。
それに数万行のデータをインポートして自動化処理を行う、という場合に①の方法だと時間制限にかかってしまいますね。

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?