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

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

ただいまの
回答率

88.91%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 174

kikuchi33

score 9

実現したいこと

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

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());
    }
  }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/12 22:59

    お忙しいところご回答いただき、
    誠にありがとうございました。

    具体的なコードまでありがとうございます。

    早速試してみました。
    おっしゃるとおりアクティブセルがTRUEになったときに
    Y21セルに時刻を出力できました。

    ただ、J2セル、K2セル以外にもTRUEとなり得るセルがあるため、
    質問にも書かせていただいた通り、
    J2セルまたはK2セルがTRUEとなったときだけ
    Y21セルに時刻を出力させることはできないでしょうか?

    勝手を言って大変申し訳ございません。

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

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

    キャンセル

  • 2020/07/12 23:06

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

    まあ、提示しているコードの最初のif文の先頭の条件を「currentRow === 2」にすれば、J2とK2だけチェックするようになります。

    キャンセル

  • 2020/07/12 23:09

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

    キャンセル

  • 2020/07/13 00:19

    お忙しいところお返事いただき、
    誠にありがとうございました。

    こちらの質問の仕方や元コードのコメントが悪かったことで
    ご気分を害されてしまったのであれば大変申し訳ございません。

    心よりお詫び申し上げます。

    質問欄に書いたコードは
    同じく質問欄に書いた参照URLに書かれていたコードをベースにしているため、
    「currentRow > 2」
    こちらのコードの意味が理解できておりませんでした。

    大変失礼致しました。

    追加コメントで教えていただいた通り、
    「currentRow === 2」
    としたところ、J2セルとK2セルだけをチェックするようになり、
    お陰様で理想的な動作となりました。

    勉強不足なため日々サンプルコードをカスタマイズしながら勉強しておりますため
    まとまった知識でなく部分部分の知識しか身についておらず、
    基本的な知識がなく質問も悪く、大変申し訳ございませんでした。

    それなのにも関わらず、
    この度はわかりやすいご回答をいただき、
    誠にありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る