Googleが用意してくれている祝日カレンダーをもとに、1年間の祝日をスプレッドシートに出力するGoogle Apps Scriptです。 祝日は年によって変わったりするので確認が面倒なのと、国外との取引がある時にその国の祝日がわかれば便利だなと思い作成しました。
特にありませんが、表示するためにスプレッドシートを利用しています。
日常的に確認したい場合はGoogleカレンダーに各国の祝日を追加したほうが便利です。
上部メニューから「各国の国民の祝日を取得する」を実行します。
国を指定するダイアログボックスが表示されます。
サンプルでいくつかの国の指定方法が表示されますが、ここにない国も(コードがわかれば)指定可能です。
日本の祝日を表示したい場合は「japanese」と入力してOKをクリックします。
選択していたセルを起点として、日付と祝日の名前の2列が出力されます。
アメリカ(usa)の祝日も出力してみました。日本よりだいぶ多い・・・?
カレンダーのイベントを取得するにはそのカレンダーを登録しないと参照できませんでした。
そのため、指定された国のカレンダーをGoogle カレンダーに追加してから祝日を取得する処理になっています。
このスクリプトで色々な国の祝日を出力すると、国の数だけカレンダーが増えてしまいますのであらかじめご了承ください。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00035/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('各国の国民の祝日を取得する', 'get_national_holiday');
// メニューを画面に追加する
menu.addToUi();
}
function get_national_holiday() {
// UIを取得
const ui = SpreadsheetApp.getUi();
// 表示するメッセージを準備
const msg = [];
msg.push('選択中のセルを起点に、今月から1年後までの国民の祝日を書き込みます。');
msg.push('国コードを1つだけ入力してください\n');
msg.push('日本: japanese');
msg.push('アメリカ: usa');
msg.push('イギリス: uk');
msg.push('中国: china');
msg.push('台湾: taiwan');
msg.push('オーストラリア: australian\n\n');
// 休日を取得したい国コードを入力させる
// メッセージの表示にないコードも入力可能。
const response = ui.prompt(msg.join('\n'), ui.ButtonSet.OK_CANCEL);
// キャンセルが押されたらスクリプトを終了する
if(response.getSelectedButton() == ui.Button.CANCEL){
return;
}
// 入力されたコードをもとに、カレンダーIDを組み立てる
const calendar_id = 'ja.' + response.getResponseText() + '#holiday@group.v.calendar.google.com';
// 未登録のカレンダーは取得不可能なため、登録する
CalendarApp.subscribeToCalendar(calendar_id);
// カレンダーを取得
const calendar = CalendarApp.getCalendarById(calendar_id)
// カレンダーの取得期間を設定するための準備
// 祝日は変わりうるため今月から12ヶ月後までの期間とする
const date = new Date(); // 現在日時の取得
const year_now = Utilities.formatDate(date, 'JST', 'yyyy'); // 今年を取得
const month_now = Utilities.formatDate(date, 'JST', 'MM'); // 今月を取得
const year_next = Number(year_now) + 1; // 来年を取得
// 結果格納用の配列を準備
let result = [];
// 範囲を指定するためのdateオブジェクトを作成
const period_from = new Date(year_now + '/' + month_now + '/01');
const period_to = new Date(year_next + '/' + month_now + '/01');
// 期間を指定してイベントを取得
const events = calendar.getEvents(period_from, period_to);
// 終日イベントの開始日と、イベントのタイトルを配列に格納しておく
for(let i = 0; i < events.length; i++){
result.push([events[i].getAllDayStartDate(), events[i].getTitle()]);
}
// シートへの書き込み処理
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // アクティブシートを取得
let range_active = sheet.getActiveCell(); // アクティブなセル範囲を取得
let row_start = range_active.getRow(); // アクティブなセルの行番号を取得
let col_start = range_active.getColumn(); // アクティブなセルの列番号を取得
let range = sheet.getRange(row_start, col_start, result.length, result[0].length); // 書き込み範囲を取得
range.setValues(result); // 書き込みの実行
}
年と月を指定すると、セルにカレンダーが出現するGoogle Apps Scriptです。カレンダーを入れたくなって調べてみたら標準機能にはなく、数式でやるにも結構面倒な感じだったので一発で作ってくれるGASを書いてみました。想像の3倍は面倒でした・・・。
指定した年の12ヶ月分のカレンダーを生成してくれるGoogle Apps Scriptです。前回作成した「指定した月のカレンダーを生成する」スクリプトをベースに、1年分出力するように変更してみました。横3 ✕ 縦4の形式で生成されます。
インターネット上にあるCSVファイルをシートに直接取り込むGoogle Apps Scriptです。オープンデータ等の取り込みが楽になるかもしれません。
Google カレンダーの予定を、スプレッドシートにまとめて出力するGoogle Apps Scriptです。カレンダーIDはダイアログボックスで入力できます。
スプレッドシートに入力した値を元に、カレンダーの予定をまとめて作成することができるGoogle Apps Scriptです。
アクティブセルを起点に、Nヶ月後までの日付を出力するGoogle Apps Scriptです。日本の祝日も表示してくれますので、予定表やガントチャートを作るときにどうぞ。
指定した年、月の最終営業日を調べるGoogle Apps Scriptです。土日と日本の祝日を除いた月内最後の平日を知ることができます。
指定した年、月の第1営業日を調べるGoogle Apps Scriptです。土日や休日を考慮した最初の営業日(平日)を知ることが出来ます。
指定した日の空いている時間すべてに予定を入れてくれるGoogle Apps Scriptです。予定を入れられたくないときにいかがでしょうか?