SUMの再定義
ワークシート関数SUMは、引数に長さ0の文字列が入るとエラーになるので、
ユーザ定義関数として再定義します。
Function TSUM(ParamArray AR())
Dim S: S = 0
Dim I: For I = 0 To UBound(AR)
S = S + IFSJ(AR(I))
Next I
TSUM = S
End Function
Function IFSJ(V, Optional J = 0) ' IF SPACE J
IFSJ = IFNC(V = "", V, J)
End Function
Function IFC(C, V, Optional S = "") ' IF C THEN V ELSE S
If C Then IFC = V Else IFC = S
End Function
Function IFNC(C, V, Optional S = "") ' IF NOT C THEN V ELSE S
IFNC = IFC(Not (C), V, S)
End Function
複雑な計算式の畳み込み
例として、在庫 =(計画、CNTがあればCNT) - 減耗 - 出庫 + 前回在庫 + 繰越
といった計算式があるとすると、
=TSUM(IFSJ([@CNT],[@計画]),-[@減耗],-[@出庫],[@前回在庫],[@繰越])
これでも充分複雑なので、RANGEと構造化参照を使って畳み込みます。
Function 在庫(A, Optional S = "")
On Error Resume Next
Dim M: M = MM(Range(A))
S = TSUM(IFSJ(DIA(A, "CNT", M), DIA(A, "計画", M)), _
-DIA(A, "減耗", M), -DIA(A, "出庫", M), _
DIA(A, "前回在庫", M), DIA(A, "繰越", M))
在庫 = S
End Function
Function DIA(A, T, Optional I = 0, Optional S = "")
On Error Resume Next
If I = 0 Then I = MM(Range(A))
S = DI(Range(CC(A, "[", T, "]")), I)
DIA = S
End Function
Aには、テーブル名の文字列が入るので、これをキーワードにして、
別のテーブルの在庫関数を定義することも出来ます。