100-70 | 数式フィールド
完成イメージ
小口現金出納帳
- 日付ごとの小口現金の出金、入金による残高を管理するアプリ
アプリの構成
管理用に日付フィールド、文字列(1行)フィールド、数値フィールドを作成する
- 日付フィールド:フィールド名、フィールドコード → 日付
- 文字列(1行):フィールド名、フィールドコード → 科目
- 数値:フィールド名、フィールドコード → 金額
krewSheetの一覧は「日付」の昇順でソートする設定にする
1.krewSheetの一覧を設定する
アプリの各フィールドをkrewSheetの一覧に配置する
2.数式フィールドを設定する
- 数値フィールド(金額列)の右隣に数式フィールドを追加する
- 追加した数式フィールドの列設定を開く
- フィールドコードを”残高”に変更する
- 数式の欄にある「編集」をクリックする
- 数式に次の内容を追加する
IF(ROW()=1,金額,OFFSET(金額,-1,1)+金額)
ワンポイント
OFFSET関数は、指定されたフィールドからの相対位置にあるセルの値を取得する関数です。
今回のケースでは、金額のフィールドからY軸方向に-1、X軸方向に1移動したセルの値(金額フィールドの右上のセルの値)を取得します。
また、常に右上のセルを参照するように設定すると、1行目では、存在しない1行目の前のレコードを参照してしまい、数式エラーとなります。
そのため、1行目のみ金額フィールドの値をそのまま取得するようにIF関数でROW関数から取得した値(行数)を判定します。
3.実行画面で確認する
入金額を正数(+)、出金額を負数(ー)で登録することで、残高が自動計算されます。
ワンポイント
OFFSET関数は常に画面上に表示されている見た目上のセル配置で値を取得するため、ソートやフィルタリングでレコードの並びが変化すると正しい結果が表示されなくなります。
また、OFFSET関数や範囲指定用列名のように、他のレコードの値を参照する関数はページングに対応しておりません。
そのため、レコード件数が500件を超え2ページ目が表示される場合は、画面に表示されていないレコードは計算対象外となり、正しい結果が表示されない場合があります。