kintone のテーブルで、小計を計算してみます。
計算式プラグイン、項目検証プラグイン、項目書式プラグインを使います。
テーブル内小計
概要行と小計行に挟まれた明細行の金額の小計を計算します。
概要、明細、小計の各行は、マニュアル設定です。
テーブル行が増加すると、計算処理に時間がかかります。
20行~30行くらいまでが実用範囲だと思われます。
※rex0220 計算式プラグイン テーブル処理時間の改善 で、50行以上も実用範囲になります。
操作例
計算式プラグインの設定
概要行と小計行の間の明細行の金額合計を小計行の金額に設定します。
「循環参照を許可」にチェックが必要です、
// No
ROWNO(テーブル)+1
// 商品
LET(CNO,ROWNO(テーブル),
SWITCH(分類,
"小計",LET(PNO,NVL(LASTIF(AND(ROWNO(テーブル)<CNO,分類="小計"),ROWNO(テーブル)),-1),
FIRSTIF(AND(ROWNO(テーブル)<CNO,ROWNO(テーブル)>PNO,分類="概要"),商品)),
商品)
)
// 数量
IF(分類="明細",数量,"")
// 単価
IF(分類="明細",単価,"")
// 金額
LET(CNO,ROWNO(テーブル),
SWITCH(分類,
"明細",数量*単価,
"小計",LET(PNO,NVL(LASTIF(AND(ROWNO(テーブル)<CNO,分類="小計"),ROWNO(テーブル)),-1),
SUMIF(AND(ROWNO(テーブル)<CNO,ROWNO(テーブル)>PNO,分類="明細"),金額)),
"")
)
- 金額の計算式の説明
- LET(CNO,ROWNO(テーブル) :
集計関数内では行番号(ROWNO)が変わるため、LET 関数で処理中の行番号を取得しておく。- SWITCH(分類, : 分類ごとに処理を分ける
- "明細",数量*単価, :明細行は、金額計算
- "小計",LET(PNO,NVL(LASTIF(AND(ROWNO(テーブル)<CNO,分類="小計"),ROWNO(テーブル)),-1), SUMIF(AND(ROWNO(テーブル)<CNO,ROWNO(テーブル)>PNO,分類="明細"),金額)),
※小計行は、前の小計行(PNO)から処理中行(CNO)前までの金額を合計 - "" :概要行は、金額を空欄
- SWITCH(分類, : 分類ごとに処理を分ける
- LET(CNO,ROWNO(テーブル) :
項目検証プラグインの設定
概要、小計行の入力不可の指定のみ行っています。
// 商品の入力不可
分類="小計"
// 数量の入力不可
分類!="明細"
// 単価の入力不可
分類!="明細"
項目書式プラグインの設定
小計行のみ背景色を指定します。
// テーブル行の条件
分類="小計"