GASで経費精算フォームを効率化!MultipleChoiceItem.setRequiredで必須項目を設定

GASで経費精算フォームを効率化!MultipleChoiceItem.setRequiredで必須項目を設定

経費精算業務は、多くの企業で時間と手間がかかる作業です。特に、申請漏れや不備があると、差し戻しが発生し、さらに時間がかかってしまいます。そこで、Google Apps Script(GAS)とGoogleフォームを活用することで、経費精算フォームを効率化し、申請漏れを防ぐことができます。本記事では、GASのMultipleChoiceItem.setRequired関数を用いて、フォームの必須項目を設定し、経費精算業務をスムーズに進める方法を解説します。

MultipleChoiceItem.setRequiredとは?

MultipleChoiceItem.setRequired(required)は、Googleフォームのラジオボタン形式の質問項目(MultipleChoiceItem)に対して、回答を必須とするかどうかを設定するGASの関数です。引数requiredには、真偽値(trueまたはfalse)を指定します。trueを指定すると必須項目となり、falseを指定すると任意項目となります。

財務・会計における利用例:経費精算フォーム

経費精算フォームにおいて、例えば「経費の種類」「日付」「金額」「摘要」などの項目は、精算処理を行う上で必須の情報です。これらの項目をMultipleChoiceItem.setRequired(true)で設定することで、申請者が必須項目を回答せずに申請することを防ぎ、不備による差し戻しを減らすことができます。

GASによる経費精算フォームの実装

ここでは、GASを用いて経費精算フォームを作成し、必須項目を設定する具体的なコード例を紹介します。

1. フォームの作成

まず、Googleフォームで経費精算フォームを作成します。フォームの項目は、以下の通りとします。

  • 経費の種類(ラジオボタン形式)
  • 日付(日付形式)
  • 金額(テキスト形式)
  • 摘要(テキスト形式)

2. GASコード

以下のGASコードは、フォームの「経費の種類」項目を必須項目に設定する例です。

function setExpenseTypeRequired() {
// フォームIDを設定
const formId = "YOUR_FORM_ID";
// フォームを取得
const form = FormApp.openById(formId);

// フォームの項目を取得
const items = form.getItems();

// 「経費の種類」項目を探す(項目名で検索)
for (let i = 0; i < items.length; i++) {
if (items[i].getTitle() == "経費の種類") {
// 項目がラジオボタン形式かどうかを確認
if (items[i].getType() == FormApp.ItemType.MULTIPLE_CHOICE) {
// 「経費の種類」項目を必須項目に設定
items[i].asMultipleChoiceItem().setRequired(true);
break;
}
}
}
}

コードの説明:

  • YOUR_FORM_IDは、作成したGoogleフォームのIDに置き換えてください。フォームIDは、フォームのURLから確認できます。
  • form.getItems()でフォームのすべての項目を取得します。
  • ループ処理で各項目をチェックし、項目名が「経費の種類」と一致し、かつラジオボタン形式(FormApp.ItemType.MULTIPLE_CHOICE)であるかを確認します。
  • items[i].asMultipleChoiceItem().setRequired(true)で、「経費の種類」項目を必須項目に設定します。

3. 複数の必須項目設定

複数の項目を必須に設定する場合は、以下のようにコードを修正します。

function setMultipleRequired() {
// フォームIDを設定
const formId = "YOUR_FORM_ID";
// フォームを取得
const form = FormApp.openById(formId);

// フォームの項目を取得
const items = form.getItems();

// 必須項目にする項目名の配列
const requiredItems = ["経費の種類", "日付", "金額", "摘要"];

// 各項目をチェック
for (let i = 0; i < items.length; i++) {
// 項目名が必須項目リストに含まれているか確認
if (requiredItems.includes(items[i].getTitle())) {
// 項目を必須項目に設定
if (items[i].getType() == FormApp.ItemType.DATE) {
items[i].asDateItem().setRequired(true);
} else if (items[i].getType() == FormApp.ItemType.TEXT) {
items[i].asTextItem().setRequired(true);
} else if (items[i].getType() == FormApp.ItemType.MULTIPLE_CHOICE) {
items[i].asMultipleChoiceItem().setRequired(true);
}
}
}
}

コードの説明:

  • requiredItems配列に、必須にしたい項目名をすべて記述します。
  • 項目の種類に応じて、asDateItem()asTextItem()asMultipleChoiceItem()などのメソッドを使用します。

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

1. フォームIDが間違っている

FormApp.openById(formId)でフォームを開けない場合、フォームIDが間違っている可能性があります。フォームのURLを再度確認し、正しいIDを設定してください。

2. 項目名が間違っている

items[i].getTitle()で取得した項目名が、フォームで設定した項目名と完全に一致しているか確認してください。スペルミスや全角/半角の違いにも注意が必要です。

3. 項目タイプが異なる

asMultipleChoiceItem()はラジオボタン形式の項目にのみ使用できます。日付形式の項目にはasDateItem()、テキスト形式の項目にはasTextItem()を使用してください。

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

1. 条件分岐による必須項目の切り替え

特定の条件に応じて必須項目を切り替えることも可能です。例えば、「経費の種類」が「交通費」の場合のみ、「出発地」「到着地」を必須項目にする、といった設定ができます。

function setRequiredByCondition() {
// フォームIDを設定
const formId = "YOUR_FORM_ID";
// フォームを取得
const form = FormApp.openById(formId);

// フォームの項目を取得
const items = form.getItems();

// 「経費の種類」の選択肢を取得
let expenseTypeItem = null;
for (let i = 0; i < items.length; i++) {
if (items[i].getTitle() == "経費の種類" && items[i].getType() == FormApp.ItemType.MULTIPLE_CHOICE) {
expenseTypeItem = items[i].asMultipleChoiceItem();
break;
}
}

// 「出発地」「到着地」の項目を取得
let departureItem = null;
let destinationItem = null;
for (let i = 0; i < items.length; i++) {
if (items[i].getTitle() == "出発地" && items[i].getType() == FormApp.ItemType.TEXT) {
departureItem = items[i].asTextItem();
} else if (items[i].getTitle() == "到着地" && items[i].getType() == FormApp.ItemType.TEXT) {
destinationItem = items[i].asTextItem();
}
}

// フォーム送信時のイベントをトリガーに設定
FormApp.openById(formId).setOnFormSubmit(function(e) {
// 「経費の種類」の回答を取得
const expenseType = e.response.getItemResponses()[0].getResponse();

// 「経費の種類」が「交通費」の場合のみ、「出発地」「到着地」を必須項目にする
if (expenseType == "交通費") {
departureItem.setRequired(true);
destinationItem.setRequired(true);
} else {
departureItem.setRequired(false);
destinationItem.setRequired(false);
}
});
}

2. スプレッドシートとの連携

フォームの回答をスプレッドシートに連携し、GASで集計や分析を行うことで、経費精算業務をさらに効率化できます。

まとめ

GASのMultipleChoiceItem.setRequired関数を活用することで、Googleフォームの経費精算フォームにおける必須項目を簡単に設定できます。これにより、申請漏れを防ぎ、経費精算業務の効率化に貢献します。本記事で紹介したコード例やトラブルシューティングを参考に、ぜひGASを活用した経費精算フォームの作成に挑戦してみてください。