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

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

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

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

Google Apps Script

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

767閲覧

GAS 2回実行しないと思う作業ができません【Googleスプレッドシート マクロ】

kiican

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/07/06 09:22

編集2021/07/06 09:43

前提・実現したいこと

最近マクロを勉強し始めた者です。
グーグルスプレッドシートのマクロ機能を使ってマクロを勉強しています。
その際、成績を付ける例題で、1回で全ての項目を入力したいと思っています。

発生している問題・エラーメッセージ

2回実行しないと一通りの作業ができません
一回目↓
イメージ説明

二回目↓
イメージ説明

該当のソースコード

グーグルスプレッドシートのマクロ機能

function sample4(){ var sheet = SpreadsheetApp.getActiveSheet() var lastRow,total,kokugo,eigo,suugaku lastRow = sheet.getLastRow() for(var i=2; i<=lastRow; i++){   //全教科の合計 total = sheet.getRange(i,4).getValue() kokugo = sheet.getRange(i,1).getValue() eigo = sheet.getRange(i,2).getValue() suugaku = sheet.getRange(i,3).getValue() sheet.getRange(i,4).setValue(kokugo + eigo + suugaku)   //合計210点以上なら〇、それ以外は✕(合否) sheet.getRange(i,5).setValue("") if(total >=210){sheet.getRange(i,5).setValue("〇")} else{sheet.getRange(i,5).setValue("✕")}   //合計240点以上で、全教科70点以上に〇(優等生) if(total >=240){ if(kokugo >=70 && eigo >=70 && suugaku >=70){sheet.getRange(i,6).setValue("〇")}}   //合計250以上はA、230点以上はB、210点以上はC、それ以外は何もなし(クラス) if(total >=250){sheet.getRange(i,7).setValue("A")} else if (total >=230){sheet.getRange(i,7) .setValue("B")} else if (total >=210){sheet.getRange(i,7) .setValue("C")} else{sheet.getRange(i,7) .setValue("")}}}

試したこと

total = sheet.getRange(i,4).getValue()

sheet.getRange(i,4).setValue(kokugo + eigo + suugaku)
sheet.getRange(i,5).setValue("")
などの文の場所を変えてみたりしましたが、別のところでエラーが出たりしてしまいます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

現状のコードでは、
1回目: 初期状態ではD列は空欄なので、変数totalに空白セルの値が入ることになります。
全教科の合計値はスプレッドシートの合計列に正しく転記されますが、
total自体は空白のまま=ゼロ扱いなので、

if(total >=210){sheet.getRange(i,5).setValue("〇")}

の行等はfalseになってしまいます。


2回目 : D列の各セルには、1回目で計算した全教科の合計値が入っています。したがって実行すると変数totalにその合計値が格納されるため、正しく処理できます。


これを一度に処理したいのであれば、下記のように、
totalに全教科の合計値を格納してからその値をD列に転記するようにしてはいかがでしょうか。

for(var i=2; i<=lastRow; i++){ kokugo = sheet.getRange(i,1).getValue(); eigo = sheet.getRange(i,2).getValue(); suugaku = sheet.getRange(i,3).getValue(); // 全教科の合計を変数totalに格納 total = kokugo + eigo + suugaku; sheet.getRange(i,4).setValue(total); 以下略

投稿2021/07/06 10:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kiican

2021/07/06 12:06

できました! なるほど、そこが足りなかったのですね。 的確にご指導下さりありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問