Google Apps Script 講座初級編「GASで月が変わるとスプレッドシートに書込むシートを自動で切り替える」
はじめに
後藤銃士です。@miwa59307636 さんが質問を投げていたので勝手に回答案をつくりましたのでご査収下さい。内容としましてはツイート通りです。
例えば、シート1に毎日入力されるデータがあって、
— mi-ko@非エンジニア女子GASマスターの道。時々助産師。あとブロックチェーン。 (@miwa59307636) 2018年12月29日
そのデータを「1月」「2月」と名前が指定されたシートにsetValueしたいです!
実装として事前にシートを作っておくのもよいですが、シートを管理する人も面倒ですしシート名の指定誤りなんて頻発する(半角全角を誤って機能しなくなる、とか)ので、今回は自動でシートを追加する実装を考えます。
また長く使うことも想定し、シート名は「2018年1月」というように「西暦+月(ゼロ埋めなし)」で行きたいと思います。
準備するもの
- GAS を使う環境
- 熱意
この機能が役に立つのは
GASでデータを定期取得し保存するケース。実際私もこの機能を「GASでTwitterのフォローフォロワー数を毎日記録する」に追加しようと思います。
今回は初級編「GASで月が変わるとスプレッドシートに書込むシートを自動で切り替える」
対象
- 基本ができていればよいかもしれません。
学べること
Google Apps Script によるスプレッドシートの使い方
講座スタート
いつもどおりコピペだけで大丈夫です。が、その前に使うスプレッドシートを用意して下さい。
用意が出来ましたか?では、
新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。
そしていつもどおり1行目の3行目の間に
var spreadsheet = SpreadsheetApp.openByUrl('あなたのスプレッドシートのURL'); // シート名生成 var date = Utilities.formatDate(new Date(), "JST", "yyyy年M月"); Logger.log(date); //2018年12月 var sheet = spreadsheet.getSheetByName(date); Logger.log(sheet); if(sheet){ Logger.log("ある"); }else{ spreadsheet.insertSheet(date); Logger.log("ない"); } // 以下、シート書込処理を記載する
をコピペして保存し、実行してみましょう。
実行後、スプレッドシートを見て下さい。
シートが作成されていますね? ログを見ると、対象とするシート名と、シートのあるなしが記録されます。
初回ですので「ない」と記載されます。
それではもう一度実行してみて下さい。
ログをみると「ある」と記載されますね?
つまりそういうことです。
ロジックのキモは
if(sheet){
になりますね。事前に
var sheet = spreadsheet.getSheetByName(date);
で sheet の情報を取得します。情報がある場合はある、ということで if 関数は真と判定して処理を行います。情報がない(=該当するシートがない)場合は null という情報を取得します。で、null とはまあ平たくいうと「なんにもない」ということです。if 関数は、null を否定の意味で捉えるので、次の else 処理を実行することになります。
こまけーことはまあいいです。データがない=偽=ifではスルーされる、ぐらいで覚えておけばとりあえずOK。
一度「2018年12月」の存在が確認できればあとは月が変わるまで「2018年12月」をシートで指定し続けます。月が変わるとまたシートを確認にいき、ないとシートを作る、ということになります。
あとは、以降にシートへ書込む処理を書いておけば、シートについて気にする必要はありません。勝手に書込シートを選択しますし、なければシートを追加してくれますからね。
というわけで今回は、「月が変わるとスプレッドシートに書込むシートを自動で切り替える」GAS の書き方についてまとめてみました。
割と使うのでどんどん組み込んでいきましょう。
ご覧いただきありがとうございました。