【応用編】チームで使える本格仕様へ!AppSheetで作る小口現金管理アプリ

AppSheet

日々の業務、お疲れ様です。
当ブログ「クロウル」を運営している、藤井貴司です。

「この繰り返し作業、もっと楽にならないかな…」

このブログでは、そんなあなたの悩みを解決するための、業務改善のヒントを発信しています。

【基本編】の記事での「小口現金管理アプリ」作成、お疲れ様でした!
基本的な入力と計算ができるようになり、その便利さを実感していただけたかと思います。

この記事【応用編】では、基本編で作成したアプリをさらに進化させ、複数人での利用を想定した「月次レポート」「アクセス制限」「入力補助」といった高度な機能を追加し、プロ仕様の業務アプリへと育て上げていきます。

基本編がまだの方は、ぜひそちらからチャレンジしてみてください!

それでは、さっそく始めましょう!

【第5章】月次レポートで経営状況を可視化しよう!

まずは、登録されたデータを分かりやすく可視化する「インタラクティブ・ダッシュボード」を作成します。

STEP 1: 月選択式・インタラクティブ集計ダッシュボードを作成する

ユーザーが見たい「月」を選ぶと、その月のデータだけが表示される、対話型のダッシュボードを作ります。

1. 月を選択するための「フィルター用テーブル」を作成する

  1. スプレッドシートに「月選択フィルター」というシートを新規作成します。
    • A1セル:フィルターID
    • B1セル:選択月
  2. AppSheetの[Data]からこの月選択フィルターテーブルをアプリに追加します。
  3. カラム設定を以下のように行います。
    1. フィルターID
      • カラム名:フィルターID
      • TYPE:Text
      • KEY?:✅
      • その他の重要な設定:Initial value: USEREMAIL()
    2. 選択月
      • カラム名:選択月
      • TYPE:Date
      • LABEL?:✅

2. 目的別に2種類の「Slice」を作成する

次に、集計の目的に応じて、データを2通りに仕分けるための「Slice」を2つ作成します。

💡そもそも「Slice」って何?
「Slice(スライス)」は、元のテーブルデータの一部を、特定の条件で切り取って(スライスして)、別の名前で利用できるようにする機能です。
元のテーブルには一切手を加えず、「〇〇という条件に合うデータだけを抜き出した、仮想的なテーブルのコピー」を作る、とイメージしてください。
グラフや表をこのSliceを元に作ることで、表示するデータを動的に絞り込むことが可能になります。

  1. [Data]「入出金伝票明細」テーブル[+ Add Slice to filter data][Create a new slice for 入出金伝票明細]をクリックします。
  2. ① 経費分析用のSlice を作成します。
    • Slice Name: 選択月の経費明細
    • Source Table: 入出金伝票明細
    • Row filter condition → Describe the expression in your own words: 選択月の経費明細と入力し、[Create a new expression]をクリックし、AND( EOMONTH([入出金伝票ID].[日付], 0) = EOMONTH(ANY(月選択フィルター[選択月]), 0), ISNOTBLANK([勘定科目ID]) )を入力する。
  3. もう一度、[+ Add Slice to filter data][Create a new slice for 入出金伝票明細]をクリックし、② 残高計算用のSlice を作成します。
    • Slice Name: 選択月の全明細
    • Source Table: 入出金伝票明細
    • Row filter condition → Describe the expression in your own words: 選択月の全明細と入力し、[Create a new expression]をクリックし、EOMONTH([入出金伝票ID].[日付], 0) = EOMONTH(ANY(月選択フィルター[選択月]), 0)を入力する。

3. ダッシュボードの「部品」となるViewを3つ作成する

[Views] → [Reference Views] → [Add View]で、以下の3つのViewを作成する

  1. 月選択パネル
    • For this data: 月選択フィルター
    • View type: detail
    • Column order: 選択月 のみ
    • Quick edit columns: 選択月 を追加
  2. 勘定科目集計
    • For this data: 選択月の経費明細
    • View type: Table
    • Group by: 勘定科目ID
    • Group aggregate: Sum: 金額
  3. 支店集計
    • 準備: 入出金伝票明細テーブルに、[入出金伝票ID].[支店ID]という数式が入った支店という名前の仮想カラムを追加しておきます。
    • For this data: 選択月の全明細 (Slice)
    • View type: Table
    • Group by: 支店 (準備で作った仮想カラム)
    • Group aggregate: Sum: 計算用金額

4. ダッシュボード本体を組み立てる

  1. [Views][Primary Navigation][Add View]をクリックします。
    • View name: 月次集計
    • View type: Dashboard
    • Position: last
  2. [View entries]で、先ほど[Reference Views]で作成した3つの部品View(月選択パネル, 勘定科目集計, 支店集計)を追加します。
  3. [Interactive mode]をオンにします。

💡【初回設定】フィルターを有効にするための最初の1行を追加する
このままでは、せっかく作ったダッシュボードに「月選択パネル」が表示されません。
以下の手順で、あなた専用のフィルター行を一度だけ作成してください。

  1. [Views] で、月選択フィルター用の仮の一覧画面(View type: Table)を一時的に作成します。
    どうせ削除するので、どこに作ってもいいです。
  2. プレビュー画面でその仮画面を開き、「+」ボタンから選択月に今月などを入力して保存します。
  3. 仮の一覧画面は削除します。

これで、ダッシュボードが正しく機能するようになります!

💡【さらなる応用】年月をドロップダウンで選ぶ方法
Date型で年月日を選ぶのは少し面倒ですよね。
年月で選びたいのに日まで選択しないといけないのは、なんか嫌じゃないですか?
そこで、年と月を別々のドロップダウンで選べるように、ダッシュボードをアップグレードしてみましょう!

  1. データ構造の変更
    • スプレッドシートの月選択フィルターシートを、選択年選択月の2列に変更します。
      選択月に入力済みの年月日を削除して、選択年には現在の年の、選択月には現在の月の数字だけを入力しておきましょう。
      • A1セル:フィルターID
      • B1セル:選択年
      • C1セル:選択月
  2. AppSheetのカラム設定変更
    • 月選択フィルターテーブルで[Regenerate schema]をクリックします。
    • 選択年選択月TYPEEnumに変更し、それぞれ以下の選択肢を追加します。
      • 選択年:2026、2025
      • 選択月:1、2、3、4、5、6、7、8、9、10、11、12
    • 💡【エラー解決】2. AppSheetのカラム設定変更でエラーが出たら
      TYPEEnumに変更した際に、「Initial Valueが不正です」というエラーが出ることがあります。
      これは、AppSheetが自動設定したTODAY()という初期値が、Enum型と合わないためです。
      選択年選択月の鉛筆アイコンをクリックし、[Initial value]の欄を一旦空欄にすることで、エラーは解消されます。
  3. 3. 初期値を「現在の年月」に設定する(推奨)
    • エラーを解消したら、さらに使いやすくするために、初期値に現在の年月が自動で入るように設定しましょう。
    • 選択年[Initial value]に、以下の数式を設定します。
      TEXT(YEAR(TODAY()))
    • 選択月[Initial value]に、以下の数式を設定します。
      TEXT(MONTH(TODAY()))
  4. 計算用仮想カラムの追加
    • 月選択フィルターテーブルに、計算用選択月という名前の仮想カラムを追加します。
      • App formula: EOMONTH(DATE(CONCATENATE([選択年], "/", [選択月], "/", "1")), 0)
  5. Sliceの数式を修正
    • 2つのSliceの[Row filter condition]を、新しい仮想カラムを参照するように修正します。
      EOMONTH([入出金伝票ID].[日付], 0) = ANY(SELECT(月選択フィルター[計算用選択月], [フィルターID] = USEREMAIL()))
  6. ダッシュボード部品(View)の修正
    • 月選択パネルViewの[Column order]を、選択年選択月の2つに変更します。

これで、より直感的に年月を選択できる、最高のダッシュボードが完成します!

【第6章】複数人で安全に使うためのアクセス制限

このアプリの真価は、複数人で使える点にあります。
この章では、このアプリをチームで安全に運用するための、最も重要な「アクセス制限」機能を実装します。

STEP 12: データへのアクセスを制限する(Security Filter)

まず、ユーザーの役割に応じて、見ることができる「データ」そのものを制限します。

  1. 左メニューの[Security](盾アイコン) > [Security Filter]タブを開きます。
  2. 入出金伝票テーブルと金種表テーブルの入力欄に、それぞれ以下の同じ数式を入力します。
    OR( USERROLE() = "Admin", [支店ID] = ANY(SELECT(ユーザーマスタ[支店ID], [メールアドレス] = USEREMAIL())) )

STEP 13: ログインユーザーの支店を自動入力する

支店担当者の手間を減らし、ミスを防ぐために、伝票作成時に自分の支店が自動で入力されるように設定します。

  1. [Data]メニューで入出金伝票テーブル金種表テーブルを開きます。
  2. それぞれの支店IDカラムの[Initial value]に、以下の数式を設定します。
    ANY(SELECT(ユーザーマスタ[支店ID], [メールアドレス] = USEREMAIL()))

STEP 14: 役割に応じて画面(View)の表示を切り替える

最後に、本部経理にしか関係のない「マスタ管理画面」を、支店担当者からは見えないように隠します。

  1. [Views]メニューを開き、[Menu Navigation]セクションにある3つの管理画面(支店管理, 勘定科目管理, ユーザー管理)をそれぞれ編集します。
  2. 各Viewの設定の中にある[Show if]という入力欄に、以下の同じ数式を入力します。
    LOOKUP(USEREMAIL(), "ユーザーマスタ", "メールアドレス", "権限") = "本部経理"

【第7章】入力の手間をさらに削減!便利な入力補助機能

STEP 15: 金種表の枚数を自動入力する

金種表フォームを開いたときに、前回の枚数を自動で入力する機能を実装します。

  1. [Data]金種表テーブルのカラム設定を開きます。
  2. 1万円から1円までのすべての金種カラムに対して、以下の設定を繰り返します。
    • 各金種カラムの鉛筆アイコンをクリックし、**[Initial value]**の入力欄に数式を設定します。
    • 例えば1万円なら、以下の数式を入力します。他の金種も、末尾の"カラム名"の部分だけを変えてください。
      LOOKUP(MAXROW(“金種表”, “確認日”, ([支店ID] = [_THISROW].[支店ID])), “金種表”, “金種表ID”, “1万円”)

【まとめ】本格アプリの完成!そして次のステップへ

お疲れ様でした!
以上で、基本編で作成したアプリが、セキュリティも万全な本格「小口現金管理アプリ」へと完全に進化しました!

このアプリを使えば、日々の面倒な小口現金の管理が、驚くほどスムーズで正確になるはずです。

さらにアプリを進化させるには?:自動メール通知機能

このアプリをさらに進化させるなら、「現金に過不足が発生したら、本部に自動でメールが飛ぶ」といった自動通知機能の実装がおすすめです。
これにより、アプリは単なる記録ツールから、異常を能動的に知らせてくれる業務アシスタントへと進化します。

この機能を実現するには、主に2つの方法があります。
ご自身のチームの状況に合わせて、最適な方法を選んでみてください。

方法1:AppSheetの標準機能「Automation」を使う(簡単)

AppSheetには、「Automation」という強力な自動化機能が標準で備わっています。
これを使えば、プログラミング不要でメール通知を簡単に設定できます。

  • 無料プランでできること: 金種表に過不足のあるデータが追加された瞬間にアプリのオーナー(あなた自身)にメールを送信できます。テストや個人利用には最適です。
  • 有料プラン(Coreプラン以上)でできること: 通知先を複数人(例:本部経理の担当者全員)に設定できます。「毎日朝8時にチェックしてレポートを送る」といった、スケジュール実行も可能になります。

方法2:Google Apps Script (GAS) と連携する(高機能・無料)

「コストをかけずに、有料プランのような高機能な通知を実現したい!」という方には、Google Apps Script (GAS)との連携が最強の選択肢です。

  • GASでできること: 「毎日朝8時にスプレッドシートをチェックし、前日分の過不足があった支店だけを一つのレポートメールにまとめて、本部経理全員に送信する」といった、非常にインテリジェントな通知システムを完全無料で構築できます。

GASを使う方法は、少しだけ設定が必要になりますが、その価値は絶大です。
詳しい手順を解説した記事も用意していますので、ぜひ次のステップとしてチャレンジしてみてください!

この記事が、あなたの業務改善の第一歩となれば幸いです。
最後までお読みいただき、ありがとうございました!