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

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

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

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

Q&A

解決済

2回答

4228閲覧

別シートの情報と同一の場合、フラグを立てる処理について

mitsuba

総合スコア20

Google Apps Script

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

0グッド

0クリップ

投稿2018/08/16 09:42

編集2018/08/17 02:54

Googleフォームのアンケートに回答された内容を、スプレッドシートAに掲載しており、
別シート(スプレッドシートB)に管理表があります。

スプレッドシートAにアンケートが回答されたら、スプレッドシートBに、「完了」フラグを立てたいと思っておりますが、
同一メンバーおよび同一コースがある為、検索キーをアドレスとコースコードが同じ場合としたいと思っております。

以下の場合、スプレッドシートAのB2セル/F2セルとスプレッドシートBのC7セル/K7セルが同じなので、
スプレッドシートBのQ7セルへ「完了」というフラグを立てたいです。

なお、AとBは同じスプレッドシートとなり、シートが異なるのみです。

スプレッドシートA
イメージ説明

スプレッドシートB
イメージ説明

GASでの実装は可能でしょうか?
もしくは、GASを実装せずに、数式で対応する方法がありますでしょうか?

ご存じの方がいらっしゃいましたら、アドバイスいただけますとたすかります。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

関数でいくならこんな感じ?

=IF(COUNTIFS('スプレッドシートA'!B:B,"="&$K7,'スプレッドシートA'!F:F,"="&$C7)>0,"完了","")

投稿2018/08/17 05:28

macaron_xxx

総合スコア3191

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

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

papinianus

2018/08/17 06:26

すばらしい解決ですね。関数を覚えないといけないのかもしれない 質問者さん。こちらをご利用ください。
mitsuba

2018/08/17 09:10

macaron_xxxさん、数式をお教えいただきまして、ありがとうございました。無事に反映されるようになりました。大変たすかりました。
guest

0

シートAとシートBが同じ(一つの)スプレッドシート内の別シートだとして、下記のonChange()を値の変更時のトリガーとして設定すれば動作する気がする(未検証)

javascript

1function onChange(e) { 2 //https://teratail.com/questions/141563 3 Logger.log("start"); 4 var datA = e.source.getSheetByName("シートA").getDataRange().getValues(); 5 var last = datA.length - 1; 6 var mailaddr = datA[last][1]; 7 var course = datA[last][5]; 8 Logger.log("check:"+mailaddr+" "+course); 9 var datB = e.source.getSheetByName("シートB").getDataRange().getValues(); 10 for(var i = 0; i < datB.length; i++) { 11 Logger.log(datB[i]); 12 if(datB[i][2] !== course) { continue; } 13 if(datB[i][6] !== mailaddr) { continue; } 14 datB[i][16] = "完了"; 15 break; 16 } 17 Logger.log("set"); 18 Logger.log(datB); 19 e.source.getSheetByName("シートB").getDataRange().setValues(datB); 20}

投稿2018/08/16 10:16

編集2018/08/17 02:56
papinianus

総合スコア12705

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

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

mitsuba

2018/08/17 00:47

コードの作成をいただきまして、本当にありがとうございます。 さっそく試してみましたところ、以下のエラーが表示されてしまいました。 何か、他に設定等必要でしょうか? ▼エラー内容  TypeError: undefined からプロパティ「source」を読み取れません。 ▼エラー対象行 var datA = e.source.getSheetByName("シートA").getDataRange().getValues(); なお、シートAとシートBは、同じ(一つの)スプレッドシートとなります。 よろしくお願いします。
papinianus

2018/08/17 01:03

確認ですが、スクリプトの実行ボタンやデバッグボタンからでは動作しません。 値の変更時のトリガーで実行していてそうなりますでしょうか?
mitsuba

2018/08/17 02:53

大変失礼いたしました。 現在のプロジェクトトリガーを、「スプレッドシートから」「値の変更」に設定して、 再度、試してみましたところ、特にエラー等は表示されませんが、シートBのQ7セルに「完了」の文字は反映されない状況です。 対応方法に誤りがある様でしたら、ご指摘いただけます様、お願いします。
papinianus

2018/08/17 02:59

formから送信される前提なので最終行のみを見る動作です。 ログを細かく出すようにしたので、startしているか、メールアドレスやコースが正しく取得できているか、ループがちゃんと回っているかなどご確認ください(どこで躓いているのか実データがないと分からないです) また、ログを出すには、フォームからの送信ではなく、フォームで書き込みが起こるであろうシートを手動で編集(値の変更)する必要がありますので、ご注意ください。
papinianus

2018/08/17 06:27

混乱させて申し訳ないです。macaron_xxxさんの解決策に乗りましょう。
mitsuba

2018/08/17 09:09

papinianusさん 親身になり相談にのっていただき、ありがとうございました。スクリプトまで作成いただきmさいたのに大変恐縮ですが、macaron_xxxさんにお教えいただきました数式で解決いたしました。本当にありがとうございました。
papinianus

2018/08/17 09:23

いえいえこちらこそすみませんでした。質問した人に分かるように説明できないのは、完全にこちらの落ち度ですので。macaron_xxxさんはすごいですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問