GASで予算管理を効率化!MultipleChoiceItem.setTitleで柔軟な選択肢を実装

GASで予算管理を効率化!MultipleChoiceItem.setTitleで柔軟な選択肢を実装

本記事では、Google Apps Script(GAS)のMultipleChoiceItem.setTitleメソッドを活用して、財務・会計、特に予算管理における業務効率化を実現する方法を解説します。予算管理における課題を解決し、より柔軟で使いやすいフォームを作成するための具体的なコード例とカスタマイズ方法を紹介します。

予算管理における課題

予算管理では、各部門やプロジェクトごとに異なる予算項目を設定し、それらの進捗を正確に把握する必要があります。従来のスプレッドシートや固定的なフォームでは、これらの多様なニーズに対応しきれず、手作業による集計や入力ミスが発生しやすいという課題がありました。

MultipleChoiceItem.setTitleとは?

MultipleChoiceItem.setTitleは、Googleフォームの複数選択式質問のタイトルを設定するためのGASのメソッドです。このメソッドを使うことで、フォームの質問内容を動的に変更し、状況に応じた柔軟な選択肢を提供できます。

予算管理での実装例

予算管理フォームにおいて、MultipleChoiceItem.setTitleは以下のような場面で活用できます。

  • 部門ごとの予算項目設定: 各部門の担当者が、自分の部門に関連する予算項目を選択できるようにする。
  • プロジェクトごとの経費分類: プロジェクトマネージャーが、プロジェクト固有の経費項目を選択できるようにする。
  • 月ごとの予算進捗確認: 月ごとにフォームの質問内容を更新し、最新の予算状況を反映させる。

実用的なコード例

例1: 部門ごとの予算項目設定

この例では、スプレッドシートから部門名を取得し、それらを複数選択肢のタイトルとして設定します。

function setDepartmentBudgetItems() {
// スプレッドシートのIDとシート名
const ssId = "YOUR_SPREADSHEET_ID";
const sheetName = "部門リスト";

// スプレッドシートを開く
const ss = SpreadsheetApp.openById(ssId);
const sheet = ss.getSheetByName(sheetName);

// 部門名を取得(A列)
const departments = sheet.getRange("A2:A").getValues().flat().filter(String);

// フォームのID
const formId = "YOUR_FORM_ID";

// フォームを開く
const form = FormApp.openById(formId);

// 複数選択式の質問アイテムを取得(IDは適宜変更)
const item = form.getItemById(123456789).asMultipleChoiceItem();

// 質問のタイトルを設定
item.setTitle("該当する部門を選択してください");

// 選択肢を設定
item.setChoices(departments.map(department => item.createChoice(department)));
}

例2: プロジェクトごとの経費分類

この例では、プロジェクト名を選択すると、そのプロジェクトに関連する経費項目が動的に表示されるようにします。

function setProjectExpenses() {
// スプレッドシートのIDとシート名
const ssId = "YOUR_SPREADSHEET_ID";
const sheetName = "プロジェクト経費";

// スプレッドシートを開く
const ss = SpreadsheetApp.openById(ssId);
const sheet = ss.getSheetByName(sheetName);

// フォームのID
const formId = "YOUR_FORM_ID";

// フォームを開く
const form = FormApp.openById(formId);

// プロジェクト選択アイテムを取得(IDは適宜変更)
const projectItem = form.getItemById(987654321).asListItem();

// 経費項目選択アイテムを取得(IDは適宜変更)
const expenseItem = form.getItemById(123456789).asMultipleChoiceItem();

// プロジェクトが選択された時の処理
projectItem.setHelpText("プロジェクトを選択してください");

// プロジェクト選択肢を取得
const projects = sheet.getRange("A2:A").getValues().flat().filter(String);
projectItem.setChoices(projects);

// フォーム送信時のイベントハンドラ
form.setCollectEmail(true); // メールアドレスを収集する場合
ScriptApp.newTrigger("onFormSubmit")
.forForm(form)
.onFormSubmit()
.create();
}

function onFormSubmit(e) {
// フォームの回答を取得
const responses = e.response.getItemResponses();

// プロジェクトの回答を取得
const project = responses[0].getResponse();

// スプレッドシートのIDとシート名
const ssId = "YOUR_SPREADSHEET_ID";
const sheetName = "プロジェクト経費";

// スプレッドシートを開く
const ss = SpreadsheetApp.openById(ssId);
const sheet = ss.getSheetByName(sheetName);

// プロジェクトに対応する経費項目を取得
const expenses = sheet.getRange("B2:B").getValues().flat().filter(String); // 実際にはプロジェクトごとに経費項目を絞り込む処理が必要

// 経費項目選択アイテムを取得(IDは適宜変更)
const form = FormApp.openById("YOUR_FORM_ID");
const expenseItem = form.getItemById(123456789).asMultipleChoiceItem();

// 経費項目の選択肢を更新
expenseItem.setTitle("該当する経費項目を選択してください");
expenseItem.setChoices(expenses.map(expense => expenseItem.createChoice(expense)));
}

例3: 月ごとの予算進捗確認

この例では、毎月月初にフォームの質問内容を自動的に更新し、最新の予算状況を反映させます。

function updateMonthlyBudgetForm() {
// フォームのID
const formId = "YOUR_FORM_ID";

// フォームを開く
const form = FormApp.openById(formId);

// 現在の年月を取得
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1;

// 質問のタイトルを更新
const item = form.getItemById(123456789).asMultipleChoiceItem();
item.setTitle(`${year}年${month}月の予算進捗状況を選択してください`);

// 選択肢を更新(例:達成、未達成、一部達成)
item.setChoices([
item.createChoice("達成"),
item.createChoice("未達成"),
item.createChoice("一部達成")
]);
}

// 月初のトリガーを設定
function createMonthlyTrigger() {
// 既存のトリガーを削除
const triggers = ScriptApp.getProjectTriggers();
for (const trigger of triggers) {
if (trigger.getHandlerFunction() === "updateMonthlyBudgetForm") {
ScriptApp.deleteTrigger(trigger);
}
}

// 月初のトリガーを作成
ScriptApp.newTrigger("updateMonthlyBudgetForm")
.timeBased()
.onMonthDay(1)
.atHour(9)
.create();
}

よくある問題とトラブルシューティング

  • フォームのIDが間違っている: フォームのIDを正しく設定してください。
  • スプレッドシートのIDが間違っている: スプレッドシートのIDを正しく設定してください。
  • 権限の問題: スクリプトがスプレッドシートやフォームにアクセスするための権限が付与されているか確認してください。
  • タイムゾーンの問題: トリガーが設定されているタイムゾーンが正しいか確認してください。

カスタマイズ方法と応用例

  • 条件分岐による質問の表示: 選択された部門やプロジェクトに応じて、表示する質問を変更する。
  • API連携: 外部の会計システムと連携し、リアルタイムな予算情報をフォームに反映させる。
  • グラフ表示: フォームの回答結果を元に、予算の進捗状況をグラフで表示する。

まとめ

MultipleChoiceItem.setTitleメソッドを活用することで、予算管理フォームをより柔軟で使いやすいものにすることができます。本記事で紹介したコード例やトラブルシューティングを参考に、ぜひGASを使った予算管理の効率化に挑戦してみてください。

PR

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

CodeCampで理想の働き方を実現しよう