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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

3758閲覧

GAS 特定セルの編集時刻を別の特定セルへ出力したい

kikuchi33

総合スコア12

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/07/12 10:26

##実現したいこと

Googleスプレッドシートの特定シートの
I2セルの内容が空欄でなくなった時刻を
Y21セルに出力したい。

##試したこと

https://teratail.com/questions/222874?link=qa_related_pc
こちらのコードをベースに以下のコードを試しました。

function insertLastUpdated() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //現在触っているファイルを取得 var sheet = ss.getSheetByName('シートAの名前'); //対象のシート名を選択 var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得 var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得 var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得 var updateRange = sheet.getRange('Y' + 21); //どの列に更新日時を挿入したいか。 Logger.log(updateRange); //更新日の記入 if(currentRow > 2 && currentCol == 9) { //2行目以降かつI列の変更を参照とする if(currentCell) { updateRange.setValue(new Date()); } } }

insertLastUpdatedのトリガーは「変更時」で設定しています。

I2セルの内容が空欄でなくなった場合でも、
Y21セルに変更時刻が出力されません。

※I2セルは
=IFS(J2=TRUE,"A",K2=TRUE,"B",AND(J2=FALSE,K2=FALSE),"")
このようにJ列とK列を元にAかBかを表示させており、
J列K列どちらもFALSEの場合は空欄表示としています。

ですので、I2セルにAのまたはBが表示されたとき
(=空欄表示でなくなったとき=J2またはK2がTRUEとなったとき)の時刻を
Y21セルに出力したいと考えています。

お知恵をお貸しいただければ幸いです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

アクティブセルになるのは、チェックボックスのJ列やK列のセルでI2セルではありません。ですから、アクティブセルがtrueになったときに日付を入力するようにすればいいのでは。

なお、currentRow > 2だと、2行目のセルは対象外になってしまいます。

GAS

1function insertLastUpdated() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName('シート1'); 4 var currentRow = sheet.getActiveCell().getRow(); 5 var currentCol = sheet.getActiveCell().getColumn(); 6 var currentCell = sheet.getActiveCell().getValue(); 7 var updateRange = sheet.getRange('Y21'); 8 Logger.log(updateRange); 9 if(currentRow >= 2 && (currentCol == 10 || currentCol == 11)) { 10 if(currentCell === true) { 11 updateRange.setValue(new Date()); 12 } 13 } 14}

投稿2020/07/12 13:35

Daregada

総合スコア11990

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

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

kikuchi33

2020/07/12 13:59

お忙しいところご回答いただき、 誠にありがとうございました。 具体的なコードまでありがとうございます。 早速試してみました。 おっしゃるとおりアクティブセルがTRUEになったときに Y21セルに時刻を出力できました。 ただ、J2セル、K2セル以外にもTRUEとなり得るセルがあるため、 質問にも書かせていただいた通り、 J2セルまたはK2セルがTRUEとなったときだけ Y21セルに時刻を出力させることはできないでしょうか? 勝手を言って大変申し訳ございません。 引き続きお知恵をお貸しいただければ幸いです。 よろしくお願いいたします。
Daregada

2020/07/12 14:06

??? 提示したコードは、「2行目以降のJ列とK列のセルだけをチェック」しています。 J2とK2だけでいいのなら、なぜ元のコードに「currentRow > 2」と書いてあったんでしょう。コメントにも「2行目以降」と書いてあるし。 まあ、提示しているコードの最初のif文の先頭の条件を「currentRow === 2」にすれば、J2とK2だけチェックするようになります。
Daregada

2020/07/12 14:09

ああ、もしかして文章だけを読んで、「すべてのアクティブセルがtrueになったときに日付が入力される」と思っているのでしょうか。
kikuchi33

2020/07/12 15:19

お忙しいところお返事いただき、 誠にありがとうございました。 こちらの質問の仕方や元コードのコメントが悪かったことで ご気分を害されてしまったのであれば大変申し訳ございません。 心よりお詫び申し上げます。 質問欄に書いたコードは 同じく質問欄に書いた参照URLに書かれていたコードをベースにしているため、 「currentRow > 2」 こちらのコードの意味が理解できておりませんでした。 大変失礼致しました。 追加コメントで教えていただいた通り、 「currentRow === 2」 としたところ、J2セルとK2セルだけをチェックするようになり、 お陰様で理想的な動作となりました。 勉強不足なため日々サンプルコードをカスタマイズしながら勉強しておりますため まとまった知識でなく部分部分の知識しか身についておらず、 基本的な知識がなく質問も悪く、大変申し訳ございませんでした。 それなのにも関わらず、 この度はわかりやすいご回答をいただき、 誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問