GASでスプレッドシートに日付を自動で入力すると、とても便利になります。
更に曜日も連動して自動入力するようにしておくと、ミスも少なくなり実用に使えるようになります。
この記事では、
スプレッドシートにGASで日付の自動入力をする方法、
曜日を連動して自動で入力させる方法、
そしてそれらを使用するためのサンプルコードとデータを公開しています。
コピペして使用できるので、
動作を確認して使って見てください。
この記事で解説している関数・メソッド
new Date()
getDay()
new Array()
getRow()
getColumn()
GASで今日の日付を表示するメソッド
GASで日付を表示するメソッドは「new Date()」を使用します。
「new Date()」メソッドは、現在の日時を取得することができるため、
こちらを使用して、setValue()でセルに入力することができます。
日付を取得するサンプルコード
function dateset() {
//アクティブシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//現在の日付を取得して変数「todayTime」に格納
var todayTime = new Date();
//取得した日付をC3に入力
sheet.getRange('C3').setValue(todayTime);
Logger.log('現在:'+todayTime);
}
GASで日付を自動入力するスプレッドシート
自動で日付を入力できるようにするためには、
GASでトリガーを使用するか、シンプルトリガーのonEdit()を使用しますが、
この記事では編集トリガーを使用する方法を解説していますが、
後で紹介しているサンプルデータはonEdit()を使用しています。
onEditについての詳しい記事はこちら
【GAS】onEditで特定のシートやセルの変更で実行する方法まとめ【Google Apps Script】
具体的には編集時に編集されたセルを取得して、
日付を自動入力するために使用するセルだったら、日付を取得して自動入力するようにしています。
「編集時」でトリガーをセットしているので、
自動入力するためのセルは、
チェックボックスでも、文字入力でも、文字編集でも、なんでも対応可能です。
日付を自動取得するサンプルコード
function checkdateset(e) {
//編集されたセルの場所を取得して変数「range」に格納
var range = e.range;
//取得した場所から行・列それぞれ変数に格納
var row = range.getRow(); // 行
var col = range.getColumn(); // 列
//編集された場所が(C9)だったら実行
if(row === 9 && col === 3){
//アクティブシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//現在の日付を取得して変数「todayTime」に格納
var todayTime = new Date();
//取得した日付をC3に入力
sheet.getRange('C3').setValue(todayTime);
}
}
日付を自動入力するコードの詳細
サンプルコードでは、C9のチェックを入れると、実行結果(C3)に日付が入力されるようになっています。
処理しているのはこの部分です。
//アクティブシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//現在の日付を取得して変数「todayTime」に格納
var todayTime = new Date();
//取得した日付をC3に入力
sheet.getRange('C3').setValue(todayTime);
この日付を入力する処理を、自動で入力できるようにするために、
編集された場所の取得を行なっているのはこの部分です。
function checkdateset(e) {
//編集されたセルの場所を取得して変数「range」に格納
var range = e.range;
//取得した場所から行・列それぞれ変数に格納
var row = range.getRow(); // 行
var col = range.getColumn(); // 列
「checkdateset(e)」で、編集された情報を取得して、
「e.range」で取得された範囲(場所)を取得しています。
次に、行と列をそれぞれ取得するために、
「getRow()」、「getColumn()」を使用しています。
取得した範囲(場所)が自動で入力するためのチェックボックスのセルだったら処理を行うように、IF文を入れています。
//編集された場所が(C9)だったら実行
if(row === 9 && col === 3){
自動入力のためのトリガーをセットする
ここまでコーディングできたら、日付を自動で入力するために、
編集のトリガーを作成していきます。
まず、GASのエディターの左にあるトリガーをクリックして開きます。
トリガーを開くと、右下に「トリガーを追加」のボタンがあるので、
そこをクリックして作成していきます。
作成画面
「実行する関数を選択」は、function名を指定します。
今回はcheckdatesetを選択。
「実行するデプロイ」と、「イベントのソースを選択」はデフォルトのままで大丈夫です。
「イベントの種類を選択」で「編集時」を選択します。
これでトリガーがセットできたので、
編集時に日付が自動入力されるようになりました!
トリガーについて詳しくはこちら
【GAS】トリガーの作成・削除・一時停止、実行されない時の対処法【Google Apps Script】
GASで日付を自動更新する場合と更新しない場合
今回の記事で紹介しているサンプルコードは、
日付が入っている、入っていないに関わらず、
現在の日時を取得して入力するようになっているので、
日付がすでに入力されている場合は、更新をしないコードも置いておきます。
このコードは、
日付を自動入力するトリガーになっているセルがチェックボックスの場合、
チェック済み(True)になった時の場合のみ日付を入力するようになっています。
//C9のチェックボックスの値を変数「checkBox」に格納
let checkBox = sheet.getRange('C9').getValue();
//チェックボックスがtrueだった場合のみ実行
if(checkBox === true){
//日付が自動入力されるセルの値を変数「value」に格納
let value = sheet.getRange('C3').getValue();
//日付が自動入力されるセルが空欄だったら入力実行
if(value === ''){
//現在の日付を取得して変数「todayTime」に格納
var todayTime = new Date();
//取得した日付をC3に入力
sheet.getRange('C3').setValue(todayTime);
Logger.log('現在:'+todayTime);//ログ確認用
}
}
空欄のチェックをしている空白かどうかという判定は、isBlankメソッドを使用する方法もあります。
詳しくはこちらの記事で解説しています。
【GAS】スプレッドシートif文セルの値の複数処理、空白かどうかisBlank()【Google Apps Script】
GASで日付と曜日を自動入力・連動表示
GASで曜日を取得するためには、「getDay()」メソッドを使用します。
「getDay()」は、曜日を数字で取得することができるメソッドで、
日曜日から土曜日まで、0〜6の数字で取得することができます。
(日曜→0、土曜→6)
今回は、自動入力した日付に対応・連動して曜日を表示させるようになっています。
曜日を連動して自動入力するサンプルコード
function checkdateset(e) {
//編集されたセルの場所を取得して変数「range」に格納
var range = e.range;
//取得した場所から行・列それぞれ変数に格納
var row = range.getRow(); // 行
var col = range.getColumn(); // 列
//編集された場所がチェックすると日付表示(C9)だったら実行
if(row === 9 && col === 3){
//アクティブシート(【Copori】GASで日付の自動入力・曜日連動サンプル)の「シート1」を取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//現在の日付を取得して変数「todayTime」に格納
var todayTime = new Date();
//取得した日付をC3に入力
sheet.getRange('C3').setValue(todayTime);
Logger.log('現在:'+todayTime);//ログ確認用
//日付に連動した曜日ナンバーを取得して変数「todeyweek」に格納
//曜日を「0」から「6」までの整数で入力されます。(日曜日が0 、土曜日が6)
var todeyweekNo = todayTime.getDay();
//曜日配列を変数「week」に格納
var week = new Array('日', '月', '火', '水', '木', '金', '土');
//取得した曜日をC6に入力
sheet.getRange('C6').setValue(week[todeyweekNo]+'曜日');
Logger.log(week[todeyweekNo]+'曜日');//ログ確認用
}
}
入力されている日付と連動せずに、現在の日時で曜日を取得する場合は、
曜日取得部分を↓に書き換えてください。
var todeyweekNo = new Date().getDay();
日付と曜日の自動取得GASサンプルデータ
サンプルデータはこちら
【Copori】GASで日付の自動入力・曜日連動サンプル
日付自動入力・曜日連動サンプルの使い方
1、こちらからサンプルシート開いて、コピーしてください
2、チェックをしたり、入力・編集してみてください
このサンプルコードでは、C9にチェックを入れたり、C12に何か入力・編集したりすると、
日付の実行結果(C3)に日付が表示され、曜日の実行結果(C6)に日付に連動した曜日が表示されたりします。
3、自動入力されない場合、権限の取得を行なってください
やり方はこちら
4、初期化する時は、C15のチェックボックスにチェックを入れてください
(実行完了すると、実行結果のセル(C3・C6・C12)が空欄になってC9・C15のチェックが外れます)
※複数アカウントでログインしているとエラーで開けないので注意してください
動かなかったりエラーが出た場合の権限取得方法
GASのメソッドの実行には、権限の取得が必要な場合があります。
権限が必要な場合、エディターからGASの手動実行を行うと、権限取得のダイアログが出てきます。
※権限取得はシンプルトリガーのonEdit()等では取得できないため、注意
権限の取得や、権限が取得されているかどうかを確認する時は、
サンプルデータの「【権限取得用】日付・曜日表示」を実行してください。
「承認が必要です」というダイアログが出たら、「権限を確認」をクリック。
アカウントの選択が出てくるので、該当のアカウントを選択
「このアプリはGoogleで確認されていません」というちょっと怖い表示が出ますが、
作成しているGASコードはGoogleが作ったものではなく、自分で作成したものだからです。
左下の「詳細」をクリック
詳細を開くと、一番下に「シート名に移動」というリンクがあるので、そちらをクリック。
「許可」をクリック
これで、権限の設定が完了しました!
サンプルデータで、GASの動きを確認してみてください。
わかりにくいところやご質問があれば、
コメントやお問い合わせよりご連絡ください!
修正・追記などさせていただきます。
また、GASでやりたいことができない!という場合も、
一緒に考えて作成させていただきますので、ご連絡くださいね。
作成したコードはブログで公開していきます。
(GASはネットのみで完全独学なので、全てが対応できるかはわかりませんが・・・)
それでは、ありがとうございました!
コメント