GAS 特定セルの編集時刻を別の特定セルへ出力したい
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 525
実現したいこと
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セルに出力したいと考えています。
お知恵をお貸しいただければ幸いです。
よろしくお願いいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
アクティブセルになるのは、チェックボックスのJ列やK列のセルでI2セルではありません。ですから、アクティブセルがtrueになったときに日付を入力するようにすればいいのでは。
なお、currentRow > 2
だと、2行目のセルは対象外になってしまいます。
function insertLastUpdated() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('シート1');
var currentRow = sheet.getActiveCell().getRow();
var currentCol = sheet.getActiveCell().getColumn();
var currentCell = sheet.getActiveCell().getValue();
var updateRange = sheet.getRange('Y21');
Logger.log(updateRange);
if(currentRow >= 2 && (currentCol == 10 || currentCol == 11)) {
if(currentCell === true) {
updateRange.setValue(new Date());
}
}
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/07/12 22:59
誠にありがとうございました。
具体的なコードまでありがとうございます。
早速試してみました。
おっしゃるとおりアクティブセルがTRUEになったときに
Y21セルに時刻を出力できました。
ただ、J2セル、K2セル以外にもTRUEとなり得るセルがあるため、
質問にも書かせていただいた通り、
J2セルまたはK2セルがTRUEとなったときだけ
Y21セルに時刻を出力させることはできないでしょうか?
勝手を言って大変申し訳ございません。
引き続きお知恵をお貸しいただければ幸いです。
よろしくお願いいたします。
2020/07/12 23:06
J2とK2だけでいいのなら、なぜ元のコードに「currentRow > 2」と書いてあったんでしょう。コメントにも「2行目以降」と書いてあるし。
まあ、提示しているコードの最初のif文の先頭の条件を「currentRow === 2」にすれば、J2とK2だけチェックするようになります。
2020/07/12 23:09
2020/07/13 00:19
誠にありがとうございました。
こちらの質問の仕方や元コードのコメントが悪かったことで
ご気分を害されてしまったのであれば大変申し訳ございません。
心よりお詫び申し上げます。
質問欄に書いたコードは
同じく質問欄に書いた参照URLに書かれていたコードをベースにしているため、
「currentRow > 2」
こちらのコードの意味が理解できておりませんでした。
大変失礼致しました。
追加コメントで教えていただいた通り、
「currentRow === 2」
としたところ、J2セルとK2セルだけをチェックするようになり、
お陰様で理想的な動作となりました。
勉強不足なため日々サンプルコードをカスタマイズしながら勉強しておりますため
まとまった知識でなく部分部分の知識しか身についておらず、
基本的な知識がなく質問も悪く、大変申し訳ございませんでした。
それなのにも関わらず、
この度はわかりやすいご回答をいただき、
誠にありがとうございました。