プチ講座

[GAS]シート起動時に自動で新規シートを作成[総集編]

プチ講座 投稿者画像  

自動で新規シートを作成する

今回はGASシリーズを使って簡単なサンプルを作ってみましょう!!
テーマは[勤務報告シート]月初に今月のシートを自動で作る。
つまり、勤務報告書等の毎月新しくシートを作る必要があるものを
毎月最初に開いたタイミングで新規シートを自動作成しようというコードです。
これを作るにあたり、手順を決めておきます。

  • シート起動時に自動でコードを読み込む
  • 当月シートの有無を確認
  • 当月シートが無ければ新規シートを作成
    • 前月のシートのコピーを作成しシート名を当月分に変更
    • シート内のセルの内容を書き換え
    • シート内の不要部分を削除
    • シートの場所を1番目(左端)へ移動

以上の順番でコードを作ります。
この順番はフローチャートを作って最初に考えておきます。
フローチャートの作り方はこちらをご覧下さい。
それでは行きましょう!!

自動シート作成

今回はこんな表を作ってみました。

勤務報告例
コードは以下の様になります。


function onOpen(){
	var dateObj = new Date();
	var month = dateObj.getMonth() + 1;
	var year = dateObj.getYear();
	var day = dateObj.getDate();
	var sheetName = "勤務報告" + month + "月";
		
	if(!SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)){
		var copySheet = "勤務報告" + (month-1) + "月";
				
		SpreadsheetApp.setActiveSheet(SpreadsheetApp.getActiveSpreadsheet().getSheetByName(copySheet));
		SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet().setName(sheetName);
			
		SpreadsheetApp.getActiveSheet().getRange("B1").setValue(month + "月報告");
		SpreadsheetApp.getActiveSheet().getRange("B6:G25").clearContent();
			
		SpreadsheetApp.getActiveSpreadsheet().moveActiveSheet(1);
	}
}

これをコピーしてもらうとすぐに使うことができます。
説明していきましょう!!

シート起動時に自動でコードを読み込む

シート起動時に自動でコードを読み込むには関数を使います。
onOpen()関数を使うと、シート起動時(シートを開いた時)にコードが自動で読み込まれます。

当月シートの有無を確認

最初に変数sheetNameを作り、当月のシート名を代入します。12月の場合は「勤務報告12月」となります。
この時、当月を取得する為に
var dateObj = new Date();の行で日付を扱う変数dateObj準備し、
var month = dateObj.getMonth() + 1;の行で変数monthに当月の月情報(12)を代入しておきます。
以上を準備しvar sheetName = “勤務報告” + month + “月”;の行で変数sheetNameに「勤務報告12月」と代入されます。
この変数sheetNameを使い、当月シートが既に作成されているかの確認
if(!SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)){の行で行っています。
シートが無い場合はif分の中の処理を行い、新規シートを作成します。

前月のシートのコピーを作成しシート名を当月分に変更

先程の確認で、当月のシートが無かった場合、新しく当月のシートを作成します。
まず、先月のシートをコピーする為にvar copySheet = “勤務報告” + (month-1) + “月”;変数copySheet先月のシート名を代入します。
次にSpreadsheetApp.setActiveSheet(SpreadsheetApp.getActiveSpreadsheet().getSheetByName(copySheet));の行で先月のシートを選択
SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet().setName(sheetName);の行で選択したシートをコピーします。
この際にsetName(sheetName)部分でシート名を当月分のシート名に変更します。

シート内のセルの内容を書き換え

シートのコピーが出来たら、今度はシート内のセルの内容を書き換えます。
SpreadsheetApp.getActiveSheet().getRange(“B1”).setValue(month + “月報告”);この行では「12月報告」という内容でセルB1の内容を書き換えています。
次のSpreadsheetApp.getActiveSheet().getRange(“B6:G25”).clearContent();の行ではシート内の入力項目部分[B6からG25まで]を削除し、当月分の入力を出来る様にしています。

シートの場所を1番目(左端)へ移動

SpreadsheetApp.getActiveSpreadsheet().moveActiveSheet(1);この行で、最後に作ったシートが一番最初(左端)に来る様、シートの順番を変更しています。

このコードを実行してみると
コード実行
この様に新しく12月のシートが作成され、入力項目も綺麗に空白になっています。

いかがでしょう、コードにすると意外と短いですよね。
この様に作っておくと便利な機能もそろそろ作れる様になってきました。
とにかく、コードを書いて実行してみること!!
これがコードを覚える上で一番手っ取り早いので、恐れずどんどん書いて、どんどん動かしてみましょう!!