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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

2489閲覧

少ない処理時間でまわすには

abuser

総合スコア8

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/02/28 08:51

編集2018/02/28 10:52

1000行ほどのデータに対して下記スクリプトを使用したところRange.getValueの使用頻度が高いとアラートがありました。
これを一層少ない処理時間のスクリプトにすることは可能でしょうか?
ご教授お願いいたします。

function myfunction() { var sh = SpreadsheetApp.openById("XXX"); var sheet = sh.getSheetByName('Sheet1'); var qty,num,lastRow lastRow = sheet.getLastRow() for (var i=2; i<=lastRow; i++) { qty = sheet.getRange(i, 15).getValue() num = sheet.getRange(i, 21).getValue() sheet.getRange(i, 16).setValue(qty / num) } }
google apps script

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

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

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

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

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

kei344

2018/02/28 10:29

質問文のコードブロックが崩れています。記入エリアの右部分あたりにリアルタイムに結果が表示されていると思うので、そこを見ながら調整してください。
guest

回答2

0

abuserさんのご質問内容は一層少ない処理時間のスクリプトにすることは可能か、ということですので、回答としましては可能ですとなります。
teratail内でも、この類の質問は探せばすぐに見つかります。

なお、HayatoKamonoさんも言及されていますように、Google Apps Script(以降、GAS)の処理速度向上の基本はGASのAPIリクエスト回数を減らすことです。
GASのほうが便利なことやGASでしかできないこと以外は、取得したデータの演算や各種処理の工程はJavascriptで行う方が良いでしょう。
また、スプレッドシートの組み込み関数で実現できるものはわざわざGASを使う必要もないです。

提示されたコードを拝見する限り、O列とU列の除算結果をP列へセットするだけなら、P1へ以下の数式設定で事足りると思います。

=ARRAYFORMULA(IF(O2:O<>"",O2:O/U2:U,""))

しかしながら、あえてGASでということでしょうから、以下2点の修正で良いと思います。

  1. データ範囲は一括で指定する**getRange(row, column, numRows)もしくはgetRange(row, column, numRows, numColumns)もしくはgetRange(a1Notation)**等を使用
  2. データは一括で取得する**getValues()setValues(Array[][])**を使用する(ループで回す必要はない)

あとはご自身で試行錯誤してみてください。

以上、誰かの参考になれば幸いです。

投稿2018/02/28 14:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/02/28 14:39

すいません。 P1 ではなく P2 ですね。
abuser

2018/03/01 04:26

=ARRAYFORMULA(IF(O2:O<>"",O2:O/U2:U,""))で簡単にセットできました。 ありがとうございます。
guest

0

ベストアンサー

getRange(row, column, numRows, numColumns)
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow-column-numrows-numcolumns

上記の公式ドキュメントに記載の通り、getRangeは4つの引数を取れてシート上の範囲を指定出来ますので、質問者様が掲載されているコードのように一行一行処理をするのではなく、最初にまとめて必要なデータをgetRangeで範囲指定して取得し、あとはGoogle Apps ScriptのAPIを使わずに普通にJavaScriptで必要なデータ加工を行い、最後に加工後の結果を、setvaluesvaluesメソッドを使ってまとめて書き込みを行うと良いかと思います。

投稿2018/02/28 11:51

HayatoKamono

総合スコア2415

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

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

abuser

2018/03/01 04:20

ご回答ありがとうございます。 早速試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問