GAS Calendar.getEventsForDayで予算実績を可視化!カレンダー連動型 経費精算自動化
日々の経費精算は、月末にまとめて行うと時間がかかり、担当者の負担になりがちです。また、予算管理においては、実績の把握が遅れることで、予算超過のリスクが高まります。この問題を解決するために、Google Apps Script(GAS)のCalendar.getEventsForDay関数を活用し、カレンダーに登録された予定から経費情報を抽出し、自動で集計するシステムを構築します。これにより、経費精算の効率化と予算実績のリアルタイムな可視化を実現します。
Calendar.getEventsForDay関数の基本
Calendar.getEventsForDayは、指定された日付のイベントをGoogleカレンダーから取得するGASの関数です。この関数を使うことで、特定の日の予定の内容、開始時間、終了時間などを取得できます。
構文:
Calendar.getEventsForDay(date)
date: イベントを取得する日付(Dateオブジェクト)。
戻り値:
Eventオブジェクトの配列。
予算管理・経費精算への実装
経費情報をカレンダーの予定として登録することで、GASを使って自動的に集計できます。例えば、会議費、交通費、宿泊費などの情報を予定のタイトルや詳細に記述し、それをGASで解析します。
実装例1:日ごとの経費集計
指定日のカレンダーイベントから経費情報を抽出し、合計金額を算出します。
function getTotalExpensesForDay(date) {
// カレンダーを取得
const calendar = CalendarApp.getDefaultCalendar();
// 指定日のイベントを取得
const events = calendar.getEventsForDay(date);
let totalExpenses = 0;
// 各イベントから経費情報を抽出して合計
for (let i = 0; i < events.length; i++) {
const event = events[i];
const description = event.getDescription();
// 説明欄に「経費:金額」の形式で記述されていると仮定
const expenseMatch = description.match(/経費:([0-9,]+)/);
if (expenseMatch) {
const expense = parseFloat(expenseMatch[1].replace(/,/g, '')); // カンマを除去して数値に変換
totalExpenses += expense;
}
}
return totalExpenses;
}
解説:
CalendarApp.getDefaultCalendar()でデフォルトカレンダーを取得します。calendar.getEventsForDay(date)で指定日のイベントを取得します。- イベントの説明欄から「経費:金額」の形式で記述された情報を抽出します。
- 抽出した金額を合計し、合計経費を返します。
実装例2:月ごとの経費集計
指定月のすべての日に対してgetTotalExpensesForDay関数を実行し、月間の合計経費を算出します。
function getTotalExpensesForMonth(year, month) {
let totalExpenses = 0;
// 月の最初の日を取得
const startDate = new Date(year, month - 1, 1);
// 月の最終日を取得
const endDate = new Date(year, month, 0);
// 日ごとに経費を集計
let currentDate = new Date(startDate);
while (currentDate <= endDate) {
totalExpenses += getTotalExpensesForDay(currentDate);
currentDate.setDate(currentDate.getDate() + 1); // 日付を1日進める
}
return totalExpenses;
}
解説:
- 指定された年月の最初の日と最後の日を計算します。
- 最初の日から最後の日まで、日ごとに
getTotalExpensesForDay関数を呼び出して経費を集計します。 - 月間の合計経費を返します。
実装例3:特定のキーワードを含むイベントの経費集計
特定のキーワード(例:プロジェクト名)を含むイベントのみを対象に経費を集計します。
function getTotalExpensesForProject(year, month, projectKeyword) {
let totalExpenses = 0;
// 月の最初の日を取得
const startDate = new Date(year, month - 1, 1);
// 月の最終日を取得
const endDate = new Date(year, month, 0);
// 日ごとに経費を集計
let currentDate = new Date(startDate);
while (currentDate <= endDate) {
// カレンダーを取得
const calendar = CalendarApp.getDefaultCalendar();
// 指定日のイベントを取得
const events = calendar.getEventsForDay(currentDate);
for (let i = 0; i < events.length; i++) {
const event = events[i];
const title = event.getTitle();
const description = event.getDescription();
// タイトルまたは説明にキーワードが含まれているか確認
if (title.includes(projectKeyword) || description.includes(projectKeyword)) {
const expenseMatch = description.match(/経費:([0-9,]+)/);
if (expenseMatch) {
const expense = parseFloat(expenseMatch[1].replace(/,/g, ''));
totalExpenses += expense;
}
}
}
currentDate.setDate(currentDate.getDate() + 1); // 日付を1日進める
}
return totalExpenses;
}
解説:
- イベントのタイトルまたは説明に、指定されたキーワードが含まれているか確認します。
- キーワードが含まれているイベントのみ、経費を集計します。
よくある問題とトラブルシューティング
- 経費が正しく集計されない:カレンダーの予定に経費情報が正しい形式で記述されているか確認してください。「経費:金額」の形式が正確でない場合、正しく抽出できません。
- 日付の範囲指定がうまくいかない:
Dateオブジェクトの扱いが間違っている可能性があります。new Date(year, month - 1, day)のように、月は0から始まるインデックスで指定することに注意してください。 - タイムゾーンの問題:GASのタイムゾーンがカレンダーのタイムゾーンと異なる場合、日付の計算がずれることがあります。
SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone()でスプレッドシートのタイムゾーンを確認し、必要に応じて調整してください。
カスタマイズ方法と応用例
- 経費科目の分類:イベントの説明欄に経費科目を記述し、GASで科目を解析して、科目ごとに集計することができます。
- スプレッドシートへの自動出力:集計結果をGoogleスプレッドシートに自動的に出力することで、より詳細な分析やレポート作成が容易になります。
- チャットツールへの通知:集計結果をSlackやChatworkなどのチャットツールに通知することで、リアルタイムな予算状況の把握が可能です。
まとめ
GASのCalendar.getEventsForDay関数を活用することで、カレンダーに登録された経費情報を自動的に集計し、予算管理と経費精算の効率化を実現できます。今回紹介したコード例を参考に、自社の業務に合わせてカスタマイズし、より高度な自動化システムを構築してください。経費精算業務の効率化と予算の可視化で、より戦略的な財務・会計業務を実現しましょう。

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう