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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1744閲覧

GAS If文にて指定文字列があればその数値、なければ0としたいがすべて0になってしまいます

Naoko_Coco

総合スコア54

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/05/10 02:46

前提・実現したいこと

スプレッドシートのD列に指定の文字列があればE列の数値を取りたく、なければ「0」の値にしたい。

else文を入れる前にelse if文にて数値を取っている場合には、ちゃんと数値が取れていました。
が、その文字列がない場合には「0」とは入ってくれないので、文字列がない場合には「0」というelse文を足したのですが、文字列があるのにすべて0とされてしまいます。
書き方が間違っているのでしょうか?

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

すべて変数が0になってしまう。

該当のソースコード

GAS

1 for(i = 2; i <= 6; i++){ 2 if(sheet.getRange(i,4).getValue() == '6月18日(火)13:00~15:00'){ 3 var sum1 = sheet.getRange(i,5).getValue() 4 }else{ 5 sum1 = 0; 6 } 7 8 if(sheet.getRange(i,4).getValue() == '6月18日(火)15:30~17:30'){ 9 var sum2 = sheet.getRange(i,5).getValue(); 10 }else{ 11 sum2 = 0; 12 } 13 14 if(sheet.getRange(i,4).getValue() == '6月20日(木)10:00~12:00'){ 15 var sum3 = sheet.getRange(i,5).getValue(); 16 }else{ 17 sum3 = 0; 18 } 19 20 if(sheet.getRange(i,4).getValue() == '6月20日(木)13:30~15:30'){ 21 var sum4 = sheet.getRange(i,5).getValue(); 22 }else{ 23 sum4 = 0; 24 } 25 }

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

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

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

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

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

mistn

2019/05/10 02:57

else if文でうまくいっていたというコードも見せてもらえますか?
dice142

2019/05/10 02:58

sheet.getRange(i,4).getValue()の値を実際に出力して確認してみてはいかがでしょう?
Naoko_Coco

2019/05/10 03:14 編集

mistnさん for(i = 2; i <= 6; i++){ if(sheet.getRange(i,4).getValue() == '6月18日(火)13:00~15:00'){ var sum1 = sheet.getRange(i,5).getValue(); } else if(sheet.getRange(i,4).getValue() == '6月18日(火)15:30~17:30'){ var sum2 = sheet.getRange(i,5).getValue(); } else if(sheet.getRange(i,4).getValue() == '6月20日(木)10:00~12:00'){ var sum3 = sheet.getRange(i,5).getValue(); } else if(sheet.getRange(i,4).getValue() == '6月20日(木)13:30~15:30'){ var sum4 = sheet.getRange(i,5).getValue(); }
dice142

2019/05/10 03:14

質問文中のif文のgetRangeと代入のgetRangeで値が違いますが、誤字ですか? else-ifの方ではどちらも(i, 4)になってますが。
Naoko_Coco

2019/05/10 03:17

dice142さん ログをとったら値が入ってませんでした。が、上記の時にも値は入ってませんがきちんと数値はとれてます。 文字列がない場合、undefinedと表示されてしまい、0とは認識してくれないのでelseで0を代入しているんですが、そうなるとうまくいきません。 全て0と代入されてしまいます。
Naoko_Coco

2019/05/10 03:19

dice142さん 誤字です。 既に修正してあります。 sheet.getRange(i,5)に数値が入ってます。
guest

回答1

0

ベストアンサー

GAS

1function myFunction() { 2 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("hoge"); 3 var sum1 = 0; 4 var sum2 = 0; 5 var sum3 = 0; 6 var sum4 = 0; 7 8 for(i = 2; i <= 6; i++){ 9 if(sheet.getRange(i,4).getValue() == '6月18日(火)13:00~15:00'){ 10 sum1 += sheet.getRange(i,5).getValue(); 11 } 12 else if(sheet.getRange(i,4).getValue() == '6月18日(火)15:30~17:30'){ 13 sum2 += sheet.getRange(i,5).getValue(); 14 } 15 else if(sheet.getRange(i,4).getValue() == '6月20日(木)10:00~12:00'){ 16 sum3 += sheet.getRange(i,5).getValue(); 17 } 18 else if(sheet.getRange(i,4).getValue() == '6月20日(木)13:30~15:30'){ 19 sum4 += sheet.getRange(i,5).getValue(); 20 } 21 } 22 // ログで確認してみてください。 23 Logger.log(sum1); 24 Logger.log(sum2); 25 Logger.log(sum3); 26 Logger.log(sum4); 27}

変数名がsum1~4となっておりますので、D列の値が指定の文字列になっている場合のE列の合計がとれればいいと推察致しました。ゼロを足し合わせる必要がないと思いますので、上記のコードではいかがでしょうか?

投稿2019/05/10 03:23

akarinrin

総合スコア33

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

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

Naoko_Coco

2019/05/10 03:28

akarinrinさん ありがとうございました! できました。 最初に0をセットしておけばよかったんですね。 助かりました。 ありがとうございます。
Naoko_Coco

2019/05/10 03:30

dice142さん mistnさん できました。 ご回答ありがとうございました。
akarinrin

2019/05/10 03:31

Naoko_Cocoさん よかったです^^ 補足になりますが、.getValue()を複数繰り返すループを回しておりますと、GASはすごく時間がかかりますので できれば.getValues()で配列に格納された方が処理が格段に速くなりますので、また調べてみてください!
Naoko_Coco

2019/05/10 03:36

ありがとうございます。 とりあえず、1か所ずつ確認しながらなので、次は配列にて書き直してみます。 確かにこれだと時間かかりますもんね^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問