第35回.スプレッドシートが非常に遅い、高速化するには
Google Apps Script で、スプレッドシートのセルを扱うと、とても処理時間がかかります、
Excelでの処理速度対策は、
マクロVBAの高速化・速度対策の具体的手順と検証
最終的には、配列を使用することになります。
処理速度を速くしたいのなら、配列を使う事になります。
配列を使用することで、セルへのデータ読み書き回数を減らします。
getRange
getValue
setValue
これらの回数を減らすという事です。

金額(D列) = 単価(B列) * 数量(C列)
この計算を行います。
function mySample35_1() {
var sheet = SpreadsheetApp.getActiveSheet();
var tannka,suuryou
var lastRow = sheet.getLastRow();
for (i=2; i<=lastRow; i++) {
tannka = sheet.getRange(i, 2).getValue();
suuryou = sheet.getRange(i, 3).getValue();
sheet.getRange(i, 4).setValue(tannka * suuryou) ;
}
}
概ね、
15秒~17秒程度の時間がかかります。
Excelなら一瞬で終わる処理ですね。
配列を使って書くと
function mySample35_2() {
var sheet = SpreadsheetApp.getActiveSheet();
var tannka,suuryou
var lastRow = sheet.getLastRow();
var ary1 = sheet.getRange(2, 2, lastRow-1, 3).getValues();
for (i=0; i<=ary1.length-1; i++) {
ary1[i][2] = ary1[i][0] * ary1[i][1]
}
sheet.getRange(2, 2, lastRow-1, 3).setValues(ary1);
}
概ね、
0.12秒~0.14秒程度の時間で終わります。
なんと、100倍の違いです。
ほぼセルへのデータ読み書きだけの処理なので、極端に違いが出ていることは承知してください。
配列の解説
これで、セル範囲を配列に入れています。
getValue
ではなく、
getValues
を使う事で、セル範囲を一括で配列化する事が出来ます。
は、2次元配列になります。
ary1[0]:[296,16,] ・・・ B2~D2
ary1[1]:[926,8,] ・・・ B3~D3
つまり、
ary1[0][0]:296 ・・・ B2
ary1[0][1]:16 ・・・ C2
ary1[0][2]: ・・・ D2
ary1[1][0]:926 ・・・ B3
ary1[1][1]:8 ・・・C3
ary1[1][2]: ・・・D3
配列の処理
注意点としては、
ary1.length
これは、配列の要素数になります。
配列は、0から始まります。
10個の配列なら、
0,1,2,3,4,5,6,7,8,9
となります。
この場合、lengthは10となりますので、
forでは、0からlength-1までループするようにします。
ary1[0].length
これで取得できます、今回の場合は3となります。
配列をセル範囲へ
setValue
ではなく、
setValues
を使う事で、配列をセル範囲に一括で入れる事が出来ます。
スプレッドシートが数百行以上になり、その全行を処理するようなスクリプトを書く場合は、
必ず今回の配列を使うようにして下さい。
あまりにもGASでのセル操作は遅すぎます。
そんなに急いだ処理ではないとしても、物事には限度というものがあります。
配列を使わない場合の速度は、さすがに限度を超えた遅さだと思います。
同じテーマ「Google Apps Script入門」の記事
第30回.並べ替え
第31回.入力規則
第32回.グラフ
第33回.表示の固定
第34回.シート保護
第35回.スプレッドシートが非常に遅い、高速化するには
第36回.フォルダとファイルを扱う(DriveApp)
第37回.フォルダの一覧取得・作成・削除(Folder)
第38回.ファイルの一覧取得・削除(File)
Excel流の最終行の取得
Twitter Bot 作成
新着記事NEW ・・・新着記事一覧を見る
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方
|生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する!
|生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- その他
- Google Apps Script入門
- スプレッドシートが非常に遅い、高速化するには
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。