質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

パフォーマンス

コード効率の向上や計算に関する質問には、このタグを使ってください。

Q&A

0回答

432閲覧

スプレッドシートのパフォーマンス向上

Hijirichan

総合スコア13

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

パフォーマンス

コード効率の向上や計算に関する質問には、このタグを使ってください。

0グッド

1クリップ

投稿2021/01/14 07:00

編集2021/01/15 07:23

あるプログラムで以下のようなコードを1→2の順番で実行していますが
パフォーマンスがかなり落ちてしまうとの指摘がありました。

そこでこのコードのパフォーマンスを向上させようと思うのですが
見ただけではどのコードを直していけば分からないという所に
なってしまいました。

どのように修正すればパフォーマンスを上げることが出来ますでしょうか。

環境:Google スプレッドシートのスクリプト

Google

1var SET_VIEW_ID ='202095345'; 2var SHEET_NAME_PV = 'PV'; 3 4// 1番目に動くコード 5function myFunction1() { 6 var spreadsheet = SpreadsheetApp.getActive(); 7 copyCheck(spreadsheet); 8 9 var sh = spreadsheet.getSheetByName(SHEET_NAME_PV); 10 spreadsheet.setActiveSheet(sh, true); 11 spreadsheet.getRange('B6').activate(); 12 spreadsheet.getRange('Title!A16:A1171').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); 13 deleteDeduplicateTitle(sh); 14}; 15 16// 2番目に動くコード 17function myFunction2() { 18 var spreadsheet = SpreadsheetApp.getActive(); 19 var sh = spreadsheet.getSheetByName(SHEET_NAME_PV); 20 sh.getFilter().sort(4, false); 21}; 22 23// 1番目の中で追加で動くコード 24function deleteDeduplicateTitle(sh) { 25 sh.getColumnGroup(4, 1).expand(); 26 var data = sh.getRange("E7:E").getValues(); 27 28 for(i=0; i<500; i++) { 29 var deduplication = data[i]; 30 if( 1 <= deduplication ) { 31 sh.getRange(i+7, 2).setValue(''); 32 } 33 } 34 35 sh.getColumnGroup(4, 1).collapse(); 36};

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

draq

2021/01/15 05:47

まずどこがボトルネックになっているのか処理時間を計測してください。
Hijirichan

2021/01/15 07:21

以下のコードを使って時間計測を行った結果以下のような結果となりました。 function logTime() { const label = 'speedTest time' console.time(label); myFunction1(); myFunction2(); console.timeEnd(label); } 16:17:32 お知らせ 実行開始 16:17:43 デバッグ speedTest time: 10811ms 16:17:43 お知らせ 実行完了 一か所抜けていたコードがありましたのでそこも追加しました。
draq

2021/01/15 09:07

時間計測のスパンが大きすぎて意味がありません。myFunction1内の各処理にかかっている時間を計測しなければチューニングするべき箇所の特定も出来ません。
Hijirichan

2021/01/15 09:57

機能1で分割して実行時間を記録するようにしてみました。 function myFunction1() { var spreadsheet = SpreadsheetApp.getActive(); const label = 'speedTest time'; console.time(label); var sh = spreadsheet.getSheetByName(SHEET_NAME_PV); spreadsheet.setActiveSheet(sh, true); spreadsheet.getRange('B6').activate(); spreadsheet.getRange('Title!A16:A1171').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); console.timeEnd(label); console.time(label); deleteDeduplicateTitle(sh); console.timeEnd(label); }; 実行結果は以下の通りとなりました。 18:52:38 お知らせ 実行開始 18:52:38 デバッグ speedTest1(シート選択) time: 356ms 18:52:43 デバッグ speedTest2(重複削除) time: 4755ms 18:52:44 お知らせ 実行完了 重複削除のところが時間がかかっている感じがします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問