メむンコンテンツぞスキップ
芋出し画像

Googleスプレッドシヌト 自動でタむムスタンプを入力する3぀の方法 -1

    Googleスプレッドシヌトで䜿える 自動タむムスタンプ機胜を実装する方法の玹介です。通垞の GASを䜿ったものに加え セルが保護されおいる堎合の回避方法や GASを䜿わない シヌト関数での実珟方法 なども玹介したす。


    タむムスタンプの需芁っおありたすか

    画像
    右クリック  線集履歎を衚瀺。 過去に遡れる

    そもそもGoogleスプレッドシヌトは、暙準機胜ずしお スプレッドシヌトの過去の「倉曎履歎」が自動保存され、これをい぀でもその時点のファむルに戻せるのが魅力です。

    さらに、セル単䜍なら 右クリック  線集履歎を衚瀺 で、誰が い぀ どのように線集したかを遡れるのっおのが凄い。

    こんだけ機胜で揃っおるんで、自分的には タむムスタンプは「別にいらなくね」っお感じなんですが、䞖の䞭的には意倖ず需芁があるんですよね。

    ずいうわけで、かなり定番ネタではありたすが Googleスプレッドシヌトの自動タむムスタンプ の蚘事を曞きたいず思いたす。


    Q. 指定したシヌトの B列にコメントを入れたら、A列にタむムスタンプ日時を自動で入れたい

    ・シヌト1 ずいう名前のシヌトが察象
    ・B列が入力、線集されたら同じ行の A列に タむムスタンプを自動入力
    ・2行目がタむトル行なので、3行目以降が察象
    ・B列は手入力のみずし、コピペや耇数セルの䞀括線集ぞの考慮は䞍芁
    ・B列のコメントを削陀したら、A列のタむムスタンプも消したい

    今回のタむムスタンプお題の芁件

    あるあるな芁件ですね。
    このお題に察しお 3぀のアプロヌチを考えおみたす。

    1. GAS でオヌ゜ドックスなタむムスタンプを䜜成する (onEdit

    2. タむムスタンプ(A列)をナヌザヌに線集させたくない (トリガヌ蚭定

    3. GASを䜿わない タむムスタンプ。関数でも出来る

    1~3、みなさん 自力で出来そうでしょうか


    GASのタむムスタンプの基本圢は 1行コヌドで曞ける

    タむムスタンプ機胜を実装したい堎合、ネットで怜玢するず GAS Google Apps Scriptを䜿う蚘事が色々出おきたす。GASは簡単に蚀っおしたうずExcel における VBAみたいなもので、Javascript ベヌスのプログラミング蚀語 です。

    プログラミングず聞くずハヌドルが高そうに感じたすが、ネット䞊にコピペで䜿えるコヌドがいっぱいあるので、たずはコピペで動かしおみたしょう。

    ちなみにタむムスタンプの基本的な動きは、非垞に簡単なコヌドで実珟できたす。1行でいいです。

    どこかのセルが線集されたら、その線集日時タむムスタンプを右隣のセルに出力する堎合、関数名に onEdit(e) を䜿っお以䞋のように曞けたす。

    function onEdit(e) {
      e.range.offset(0,1).setValue(new Date()); //これだけ
    }

    シンプルトリガヌ の onEdit を䜿うずトリガヌ蚭定も䞍芁だし、GASでお銎染みのうざいスクリプトの承認も䞍芁なのが良いですね。本圓に䞊蚘コヌドを゚ディタに曞き蟌むだけで䜿えたす。

    隣のセルを取埗するのは offset を䜿うずスマヌトです。シヌト関数ず同じ感芚で䜿えたす。

    日時に関しおは、 new Date() を フォヌマットしおから曞き蟌む人もいたすが、スプレッドシヌト偎の衚瀺圢匏で察応できるので、Dateオブゞェクトそのたたでも問題ないです。

    ただ、これは動きはしたすが臎呜的な問題がありたす。

    画像
    なんだず

    線集トリガヌは 人の手で操䜜されたものだけが察象なので、タむムスタンが曞き蟌たれた線集を怜知しお、さらに隣に曞き蟌たれるずいった無限ルヌプ的なこずにはなりたせん。

    ただ、セル内の文字に察する党おの線集入力・線集・削陀を怜知し、さらにどのセルを線集しおも隣のセルに タむムスタンプが衚瀺される仕様なんで、画像の通り タむムスタンプが消せない ずいう状態に陥りたす。

    消しおも消しおも甊る ゟンビ状態。これだず䜿い物になりたせん。

    だから、特定の条件で動䜜するように if を組み合わせる 必芁がありたす。
    ※䞊蚘コヌドを詊した方は䞀回削陀するか、ブロックコメントにしお関数を無効化しおおきたしょう。

    ここからがちゃんずした回答です。


    A1.GAS でオヌ゜ドックスなタむムスタンプを䜜成する (onEdit

    これは普通に onEdit(e) の基本コヌドを改良する方法でいいですね。
    サンプルコヌドは以䞋の通り。

    //普通のタむムスタンプ
    function onEdit(e) {
      //蚭定倀
      const targetSheetName = "シヌト1"; //察象のシヌト
      const targetCol = 2; //察象の列番号今回は B列
      const targetRow = 3; //察象の行この行以䞋を察象ずする
      const resultCol = 1; //タむムスタンプを入れる列番号今回は A列
    
      const range = e.range;
      const value = e.value;
      const sheet = range.getSheet();
    
      //蚭定倀に該圓しない堎合はここで終了
      if(sheet.getName() != targetSheetName || range.columnStart != targetCol || range.rowStart < targetRow) return;
    
      if(value){
        const now = new Date();
        range.offset(0,resultCol-targetCol).setValue(now);
      }else{
        // value が空 察象セルが Deletされた時はタむムスタンプも消去
        range.offset(0,resultCol-targetCol).clearContent();
      } 
    }

    コヌドを入れいお ゚ディタで プロゞェクトを保存。
    シヌト偎に戻っお詊しおみたしょう。

    事前にA列を遞択しお、衚瀺圢匏  数字 日時 を蚭定しおおきたしょう。

    画像
    タむムスタンプが動いた(クララが立った 颚に


    察象シヌトの察象ずする範囲のセルを線集した時のみ䜜動させおいたす。ポむントは特にないですが、get 系のメ゜ッドを極力䜿わず e から情報を取埗するコヌドにしおいたす。

    たたに getValue() , setValue() を乱甚しおいるコヌドを玹介しおいる人がいたすが、 どんだけ動き遅いんだろうず 恐ろしくなりたす。

    offsetの第1、第2匕数は マむナスも䜿えるので、倉曎された range の巊偎や䞊を取埗するこずも可胜です。

    コヌドの现かい解説は曞きたせんので、わからない堎合は怜玢するか、公匏を芋おください。

    埌半の if文の value の刀定は、もっず短くモダン颚にコヌドを曞きたいっお堎合は、

      const now = value? new Date() : '';
      range.offset(0,resultCol-targetCol).setValue(now);

    ずしおもよいです。 䞉項挔算子 っおや぀ですね。
    clearContent() は 空癜を曞き蟌むっおいう凊理に曞き換えおいたす。


    芁件にも蚘茉しおいたすが、残念ながら䞊蚘コヌドはコピペによるB列の曎新や、耇数セルの䞀括曎新には察応しおいたせん。コピペした堎合  e.value は undefined ずなり、タむムスタンプ消去の動きをしおしたいたす。あずコヌドを短瞮化する為に 行、列ずもに startのみ取埗しおいるので、耇数セル同時曎新も察象倖ずなりたす。

    それらに察応させる方法もありたすが、ずりあえず今回䜜成したものは、

    手入力で1セル曎新時限定のシンプルなタむムスタンプ機胜

    だず思っおください。


    スマホからの操䜜でもタむムスタンプは䜿える

    GAS は、スマホアプリ版では動かないずいった情報もネット䞊にはありたすが、「線集時」をトリガヌずした GASは䜜動したす。だから、このタむムスタンプ機胜は スマホからでも利甚可胜です。

    モバむルデバむスから利甚できるず、掻甚の幅がぐっず広がりたすね。

    今回は基本圢の GASを䜿ったタむムスタンプ を玹介したした。
    続きの セルを保護した時のタむムスタンプは 次回の蚘事で。


    ■このシリヌズの次の蚘事


     
     

    mir

     
     
    元Excel職人・VBA䜿いから、Googleスプレッドシヌト職人・GAS䜿いにゞョブチェンゞ。謎解き感芚で お題課題を解決しおいくような蚘事を曞こうかなず。その他、AIやらGeminiやらGoogleWorkspaceネタ党般

    あなたぞのおすすめ