年末年始などにスプレッドシートに日付入力するとき、地味にストレスを感じませんか?
スプレッドシートの仕様では、「年(Year)」を省略して「月/日」だけ入力すると、入力日の「年」を自動で補完してくれます。
この仕様が仇となるのが、このような場面です。
- 2020年の 年末 に、翌年日付のつもりで「1/4」と入力すると、「2020/1/4」になってしまう(来年の1月日付にしたい・・・)
- 2021年の 年初 に、昨年日付のつもりで「12/30」と入力すると、「2021/12/30」になってしまう(去年の12月日付にしたい・・・)
こんなとき、我々はこう思うのです。
違う、そうじゃない!
とはいえ、わざわざ「年/月/日」を入力するのは面倒くさいですよね。
そこで、この記事では、日付入力時の「違う、そうじゃない」を解決するスクリプトを紹介します。
まずは動作イメージをご覧ください(再生しても音は出ません)
※スクリプト付きのスプレッドシートをコピーしてそのまま使えるよう、記事の最後にリンクを貼っています。
シンプルトリガー onEdit でセルの入力日付を変更する
このツールで使うのは、シンプルトリガーのonEdit(e)です。スプレッドシートの値が変更されたときに、自動で実行されます。
このonEditを使って、セルに日付が入力された場合、その日付を「前年」または「翌年」に変更します。
日付の設定変更ができるよう設定シートを作成
「設定」シートのA2セルにリストを作成して、前年/今年/翌年 を切り替えられるようにします。「データの入力規則」で作成するとよいでしょう。
(例)「前年日付にする」を選択すると、スプレッドシート の 全シート の 全セル に新たに入力する日付が、前年日付になる(既に入力済みの日付には影響しない)
セルの入力日付の「年」を変更するスクリプト
処理内容はこのようになっています。
セルに入力された値を取得し、
- 「日付以外」の場合、処理終了
- 「日付」の場合、設定シートの設定どおりに、年を ±1 してセルに再代入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
function onEdit(e) { const value = e.range.getValue(); //入力値がobject(主に、日付)以外の場合は処理終了 if (typeof value !== "object") return; const sheet = e.source.getActiveSheet(); const row = e.range.getRow(); const col = e.range.getColumn(); const config = checkDateConfig(); let date = value; if (config === "前年日付にする") { date.setFullYear(date.getFullYear() - 1); } else if (config === "翌年日付にする") { date.setFullYear(date.getFullYear() + 1); } date = Utilities.formatDate(date, "JST", "yyyy/MM/dd"); sheet.getRange(row, col).setValue(date); } /** * 日付設定を取得する * * @return {string} value 設定値 */ function checkDateConfig() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("設定"); const value = sheet.getRange("A2").getValue(); return value; } |
【ツール配布】コピーしてお使いください
コンテナバインド型(スプレッドシートに紐づくスクリプト)で配布しています。権限は「閲覧のみ」としているので、コピーしてお使いください。
[shared]入力日付を自動で「前年」または「翌年」に変更する(※コピーしてお使いください)
ちょっとした工夫で、日常の「違う、そうじゃない!」を無くして、ストレスフリーに仕事を進めていきたいですね。