スプレッドシートを仕事なんかでいじることはあるだろうけど、あれ嫌ですよね・・・・なんかこうスプレッドシート使うと一気に仕事がんが出るというかあのマス目が何とも言えない気持ちにさせてくれます。とはいってもやらないといけないことはやらないといけない・・・ただやるならできるだけ楽をしてやりたいです。
毎回自分で入力しなくてもいいことを入力するのはできれば避けたい。そこで今回はGASを使ってスプレッドシートで日付を自動で入力するっていうことをやっていきたいと思います。セルの変更をしたときに毎回日付を入力していくなんてだるいですからね。やっていきましょう。
スプレッドシートで日付を自動入力する方法
日付を自動入力するためにはプログラムの力を使いたいです。スプレッドシートからGAS(GoogleAppsScript)が使えるからそれを使っていきましょう。
GASはスプレッドシートとかGmailとかGoogleカレンダーとかいろんなサービスをプログラムでいじることができる便利なやつ。
このサイトでもいくつかGASを使ったことはやったりしているね。アイデア次第で結構便利なことができるから、効率化とか自動化とか興味あるなら知っておいて損はないと思う。
自動入力にはGASを使う
普通にスプレッドシートに入力しても日付は自動で入力されないので、GASを使って自動で入力されるようにします。やり方は後で書くけど、流れとしてはこんな感じ。
- 日付を取得してスプレッドシートに書き込むGASを書く
- 上記で作成したプログラムをスプレッドシートの編集時にGASのトリガーで動かす
ちょっと分かりづらいけど、スプレッドシートを編集したときにプログラムを動かして日付を自動入力するっていう流れです。
詳しくは後でやっていきましょう。
スプレッドシートからGASを使う方法
スプレッドシートからGASを使うには[拡張機能→Apps Script]と進んでアプリを作成を選べばOK。(前はデータの項目の中にあった)
スプレッドシートからApps Scriptを使う方法は分かったと思うから、次から日付の自動入力を本格的にやっていこう。
スプレッドシートとGASで日付の自動入力をやっていく
まずは自動入力したい日付のセルを確認しておこう。どんなシートでもいいけど、今回はこのToDoのスプレッドシートの日付の項目を自動入力していきたいと思う。
入力する日付のセルの確認ができたら、拡張機能からGASに進んでコードを入力していく。きっと誰かがやっているであろうことなので、調べてみるとやってくれている人がいますね。
【Google Spreadsheet】セルを変更すると、自動的に日付更新するGoogleAppsScript
参考にしてやってみるとコードはこんな感じ。
function inputDate() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //現在触っているファイルを取得
var sheet = ss.getSheetByName('ToDo'); //対象のシート名を選択(hogeの部分にシート名記載)
var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得
var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得
var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得
var updateRange = sheet.getRange('B' + currentRow); //どの列に更新日時を挿入したいか。この場合はB列
Logger.log(updateRange); //更新日の記入
if(currentRow > 3 && currentCol == 3) { //3行目以降かつC列の変更を参照とする
if(currentCell) {
updateRange.setValue(new Date());
}
}
}
ぶっちゃけコード見ただけだとわかりづらいからちょっと大事な点は説明したい。まず今回自動入力したいのは以下の項目の入力が終わったら。
これはコードの以下の部分。C列に変更があったら日付を入力してほしいからcurrentColには3を指定している(対応はABC→123みたいな感じかな)
if(currentRow > 3 && currentCol == 3) { //3行目以降かつC列の変更を参照とする
自動入力するセルを指定しているのはこの部分。日付の部分はB列だからBっていうのを指定しているよ。
var updateRange = sheet.getRange('B' + currentRow); //どの列に更新日時を挿入したいか。この場合はB列
コードを書いたら、実際にコードが正しく動くか確認してみる。適当に何か入力してみよう。
そしたらGASの画面から関数を実行してみる。(この時点ではまだ入力したら自動で入力されるっていうことにはなっていない)
実行するとアクセスを許可してやらないといけない。
実行に成功するとこんな感じで日付が入る。
だけど、求めているのは入力が終わったら自動入力っていうこと。次は自動で入力されるように設定していこう。
トリガーを使って日付を自動で入力されるようにする
日付を自動で入力してくれるプログラムの確認はできたけど、まだ自動入力っていうのほあできていない。これを実現するためにGASのトリガーっていうやつを使います。
これはプログラムの実行タイミングを設定することができて、今回でいえばスプレッドシートで入力があればプログラムを実行っていうことができる。[編集→現在のプロジェクトのトリガー]と進んでトリガーの作成画面にいこう。
トリガーの追加から追加する。実行する関数は自分で作った関数、イベントのソースはスプレッドシート。イベントの種類は編集時なんかにしておくといいんじゃないだろうか。
保存してスプレッドシートの項目を編集してみると・・・良い感じに日付が入力されますね。
まとめ
スプレッドシートからGASを使うことでスプレッドシートで指定したセルに日付を自動で入力することができました。
- GASで指定したセルに日付を入力するプログラムを書く
- トリガーでスプレッドシート編集時にプログラムを実行する
流れとしてはこんな感じだけど、プログラム書くのがちょっと面倒だったりもしますよね。一回書いちゃえば後は勝手に動いてくれるからいいけど最初がちょっと億劫。
GASはJavaScriptと同じノリで書くことができるから、JavaScript分かる人にとっては楽かな。
ココナラを使ってGASを書いてもらう
GASを使ってやってみたけど、いまいちプログラムのことは分からかなったりする場合もありますよね。そういう場合にはスキルを持っている人にやってもらうのも一つの手です。スキルの売り買いをすることのできるサービスって今やいろいろありますからね。ココナラを見てみると作業の自動化をしてくれる人たくさんいます。