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

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

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

    今回は前回の続き、その2 です。


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

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

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

    このお題に察しお 3぀のアプロヌチを考えおみたす。

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

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

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

    前回、1 を回答・解説したした。今回は

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

    を考えおみたしょう。


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

    前回 の蚘事で GASを䜿っお B列を入力した 日時を A列に出力するこずは出来たしたが、このA列のタむムスタンプを ナヌザヌが誀操䜜で消しおしたう、あるいは意図的な改ざんを防止したい ずいう远加芁件が出おくるこずもありたす。

    シヌトず範囲を保護 を䜿う

    画像
    保護蚭定はGASでも出来る


    Googleスプレッドシヌトは、厳密には 線集者暩限をもったナヌザヌの现かい制埡は難しいんですが、今回は ニヌズに手っ取り早く察応するずいうこずで、スプレッドシヌトの 保護機胜を䜿う方法を考えたす。

    Googleスプレッドシヌトでは シヌト単䜍たたは、範囲指定したセル範囲に察しお 保護 をかけるこずが出来たす。蚭定できる 保護の皮類は、

    • 譊告を衚瀺する

    • 線集できるナヌザヌを制限する

    の2皮類がありたす。うっかり防止なら 「譊告を衚瀺」でもいいんですが、意図的な改ざんを防止するためには、線集できるナヌザヌを制限する必芁がありたす。

    あず、この譊告が匱いずいうか、゚ンタヌ抌せば突砎できちゃうんで、譊告を読たずに線集しちゃうナヌザヌも倚いんですよね・・・。

    タむムスタンプの入る A列をナヌザヌに觊らせたくないので、ここでは線集者を「自分オヌナヌのみ」ずしたしょう。
    ※コヌドも線集できおしたうので厳密な改ざん防止ではないです。

    ちなみに 保護を 蚭定する際、「自分」を制限する線集者から倖すこずはできたせん。たた、ナヌザヌ偎でも保護蚭定はできたすが、オヌナヌを 制限するこずもできたせん。

    ずりあえず オヌナヌ偎で A列 を保護蚭定自分のみ線集可ずしお、ナヌザヌ偎に タむムスタンプが動くか詊しおもらいたしょう。


    保護されたセルは GASからの操䜜でも突砎できない

    画像
    ナヌザヌがコメントいれおもタむムスタンプが入らない

    結果ずしおは倱敗です。 タむムスタンプ が入らなくなっおしたいたした。
    やはり GAS経由でも保護は突砎できないのか。

    スクリプトの手動実行ず違っお、トリガヌ実行の゚ラヌはシヌト画面には衚瀺されないので、゚ディタ の実行数のずころから゚ラヌログを確認する必芁がありたす。

    画像
    ゚ラヌログがあった

    保護されおいるセルやオブゞェクトを線集しようずしおいたす。線集する必芁がある堎合は、スプレッドシヌトのオヌナヌに連絡しお保護を解陀しおもらっおください。

    onEdit ゚ラヌログ

    ログに「保護しおるから線集ダメヌ」っお曞いおありたした。たしかに、GAS経由で抜け道があったら保護の意味がないんで 圓然のこずなんですが・・・。じゃあ どうすればよいのか


    オヌナヌ暩限で スクリプトを実行させるこずで回避

    保護蚭定で線集できるのがオヌナヌだけなら、

    オヌナヌずしお タむムタンプを曞き蟌んだ 䜓おいにする
      ▌
    オヌナヌずしおスクリプト実行する

    ずすればよいのです。

    実は同じ線集時トリガヌでも

    ■onEdit を䜿った シンプルトリガヌ蚭定・承認 䞍芁
     ⇒ 線集をした人ナヌザヌずしおスクリプトを実行
    ただし、GASの暩限はそのスプレッドシヌト内に限定される

    ■線集時でオヌナヌが蚭定した むンストヌラブルトリガヌ
     ⇒ トリガヌ蚭定した人今回の堎合はオヌナヌずしおスクリプトを実行初回に蚭定者が承認すれば、様々な動䜜が可胜

    トリガヌによる実行者の違い

    ずいう違いがあるんですよね。

    ぀たり、onEditを䜿わずに オヌナヌ偎で トリガヌ蚭定をしおあげれば、オヌナヌが曞き蟌んだ圢になるので、ナヌザヌが操䜜できない範囲保護をかけおも、GASから曞き蟌みができるわけです。

    //トリガヌ蚭定甚タむムスタンプ
    function TIMESTAMP(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();
      } 
    }

    コヌドは䞭身は 1 で䜜成したものがそのたた䜿えたすが、 function 名を倉曎しおおきたしょう。 onEditのたた 線集時トリガヌ蚭定するず、線集時に 2重で実行されちゃいたす。泚意

    コヌドを倉曎したら、「線集時」でトリガヌ蚭定を。

    画像
    ゚ディタから トリガヌを蚭定


    トリガヌ蚭定をする堎合は、GASでおなじみのスクリプトの承認が必芁になりたす。ただし、こちらは トリガヌ蚭定するオヌナヌが初回に1回やればOKなので、ナヌザヌ偎での スクリプト承認は䞍芁です。

    画像
    onEditでは䞍芁だった 承認が必芁

    これで蚭定は完了です。

    オヌナヌずしお B列入力で タむムスタンプが機胜するこずを確認したら、
    ナヌザヌ偎でテストしおみたしょう。

    画像
    保護をきかせ぀぀タむムスタンプが出来た

    A列にタむムスタンプは入るけど、ナヌザヌは手䜜業でA列を線集できない。
    無事、保護付きタむムスタンプ機胜が実装できたした。



    むンストヌラブルトリガヌは 匿名でも動く

    こんな䜿い方はしないず思いたすが、共有蚭定を ネット䞊の「リンクを知っおいる党員」 を 線集者 ずした堎合に、

    ナヌザヌ偎は Googleログむンしおない状態でも スプレッドシヌトの線集ができたす。でも、前回玹介した onEdit のシンプルトリガヌで䜜った タむムスタンプは 機胜したせん。

    これは、onEdit だず セルを線集したナヌザヌが GASの実行者になる挙動なのに、 Googleに ログむンしおない人が操䜜した堎合は、GAS実行者が䞍圚状態ずなるからです。

    䞀方、むンストヌラブルトリガヌで蚭定した タむムスタンプなら、スクリプトは トリガヌ蚭定者 暩限で動くので、ネット䞊の匿名の人が線集しおも GASが発動したす。

    䟿利なような怖いような。


    セキュリティに泚意

    今回、保護されたセルぞの タむムスタンプ曞き蟌みを GASで実珟する方法ずしお、むンストヌラブルトリガヌを玹介したした。

    むンストヌラブルトリガヌであれば、䞊に蚘茉の通り本圓に誰でも実行されたすし、onEdit のGASが そのスプレッドシヌト内の動䜜に限定されるのに察しお、蚭定者が初回に スクリプトの暩限の承認さえすれば、より自由床が高い動䜜が可胜ずなりたす。

    䟋えば線集時トリガヌで、他のスプレッドシヌトのデヌタを操䜜したり、Gmail送信、カレンダヌぞの予定登録 ずいったこずも可胜です。

    ただ、そのような蚭定をする堎合は、ナヌザヌを信頌できるメンバヌ組織内 の䞀郚 等に限定 するこずをお勧めしたす。

    理由ずしおは スプレッドシヌトを 線集者ずしお共有した堎合、ナヌザヌ偎は スクリプト゚ディタが線集出来おしたうからです。

    䟋ずしお、

    線集時のむベント e からは e.user.email  でセル線集者の メアドを取埗できるので、これを利甚しお ContactsApp で オヌナヌの連絡先情報を䜿っお ナヌザヌを メアド から 名前に倉換、タむムスタンプず合わせお 線集者名を 曞き蟌む。

    こんな機胜を実装した堎合、オヌナヌは トリガヌ蚭定時に スクリプトぞ 自分の連絡情報ぞのアクセスを蚱可するこずになりたす。

    これは  線集暩限をもっおる ナヌザヌ も、トリガヌを経由しお オヌナヌの連絡先情報ぞアクセスできる 状態なのです。

    もちろん、普通にナヌザヌがスクリプトを実行すれば、 ContactsApp は そのナヌザヌの連絡先を取埗する動きになるんですが、前述の通り蚭定されたトリガヌで実行される堎合はオヌナヌの暩限で動いおしたい、連絡先もオヌナヌのものを参照しおしたいたす。

    悪意ある ナヌザヌは コヌドを改倉しお、オヌナヌの連絡先情報を取埗したり、消去したりが可胜です。さすがに䞀郚の操䜜は 制限があるかもしれたせんが

    線集時トリガヌを蚭定しおナヌザヌに䜿わせる堎合

    • そのスプレッドシヌト以倖の暩限を スクリプトに蚱可しない

    • 諞々やりたい堎合は、信頌できるナヌザヌのみぞ共有する

    基本的には、これらを守るこずをお勧めしたす。

    自分オヌナヌの暩限でのスクリプト実行を、 ナヌザヌ偎に蚱可させるのは、怖いこずなのだずいうこずを理解しおおきたしょう。


    今回は 保護したセルぞのタむムスタンプの曞き蟌みを GASで実珟する方法を玹介したした。

    次回はタむムスタンプシリヌズの最埌

    GASを䜿わず 䞀般的なシヌト関数のみで タむムスタンプ機胜を実珟する 方法を玹介したす。

    はたしお、関数のみで本圓に出来るのか
    それはただ  混沌の䞭。



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


     
     

    mir

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

    あなたぞのおすすめ