LoginSignup
0
1

More than 5 years have passed since last update.

Excelの薄い本(2)

Last updated at Posted at 2018-04-30

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には、テーブル名の文字列が入るので、これをキーワードにして、
別のテーブルの在庫関数を定義することも出来ます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1