1月に去年の12月で入力する方法(Gスプレッドシート)

応用

GAS応用の一覧

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

【GAS】VLOOKUPをやってみる(Javascriptの配列に対するfind,map)
  • GASでVLOOKUP関数的な機能を実現できます。
  • 配列内の検索や値の取得方法がわかります。
  • 今回は、とっても価値の高い方法をお伝えします。


    これを知ることであなたは、

    • 1月に12月の日付を入力した際に去年にする方法がわかります。
    • 1月に12月の日付を入力した際に自動的に去年する方法がわかります。


    逆に、知らないと

    めんどくさいなと思いながらも常に
    西暦から入力しなければ行けません。

    なので、サクッとマスターして

    あのー、12/3と入力して去年の12/3にならないですか?

    うーーん、いろいろ回避する方法はあるよ。

    と答えてあげてください。

     

    Excelの場合はこちら↓

     

    動画はこちら

    シートはこちら

    ※クリックするとシートが開きます。

     

     

    スクリプト

    function dummy() {
      Browser.msgBox("メッセージボックスのテスト", "ダミーです", Browser.Buttons.OK)
    
    
    }
    /**
     * 日付入力時に
     * 今日が1月~3月で、入力が11月12月の場合は、去年にする
     * 今日が11月、12月で、入力が1月~3月の場合は、来年にする
     */
    function onEdit(e) {
    
    
      const value = e.range.getValue()
    
    
      //とりあえず入力値がobject以外の場合は終了
      if (typeof value !== "object") return
    
    
      const cell = e.source.getActiveCell()
    
    
      const BEGIN_YEAR = 1
      const END_YEAR = 2
    
    
      const today = new Date()
    
    
      let date = value
    
    
      const inputmonth = date.getMonth() + 1  //入力された月(読みやすいように1足しておく)
    
    
      let nowm = 0    //0:デフォルト 1:年末  2:年始
      let nowmonth = today.getMonth() + 1   //今日の月(読みやすいように1足しておく)
    
    
    
      //今日が1月~3月の場合は、年始とする
      if ((nowmonth == 1) || (nowmonth == 2) || (nowmonth == 3)) {
        nowm = BEGIN_YEAR
      }
    
    
      //今日が11月か12月の場合は、年末とする
      if ((nowmonth == 11) || (nowmonth == 12)) {
        nowm = END_YEAR
      }
    
    
      //年始、年末以外は何もしない
      if (nowm == 0) return
    
    
      //入力が今年じゃない場合は、何もしない
      if( today.getFullYear() != date.getFullYear()) return
    
    
      //今日が年始で入力が11月12月は、去年
      if (nowm == BEGIN_YEAR) {
        if ((inputmonth == 11) || (inputmonth == 12)) {
          date.setFullYear(date.getFullYear() - 1) //去年にする
          cell.setValue(date)
        }
      }
    
    
      //今日が年末で入力が1月~3月は来年
      if (nowm == END_YEAR) {
        if ((inputmonth == 1) || (inputmonth == 2) || (inputmonth == 3)) {
          date.setFullYear(date.getFullYear() + 1) //来年にする
          cell.setValue(date)
        }
      }
    
    
    }

     

    最後までご覧いただきありがとうございます。

    つぎはこちら

    【GAS】CSVファイルをローカル(パソコン)に出力する方法(Gスプレッドシート)
  • ワンクリックでCSVファイルをローカル(パソコン)にダウンロードすることができます。
  • さらにダウンロードしたファイルをExcelで開いても文字化けしていません。
  • GAS応用の一覧

    コメント

    タイトルとURLをコピーしました