Access Tips by pPoy

  
トップへ←Top    QueryへQuery  FormへForm  ReportへReport  Module(Sub)へSub  Module(Function)へFunction  ExcelへExcel  Etc.へEtc.  Word連携へWord

Module データの数量を集計する関数 《Sum関数の横方向版》
(Access97,Access2000,Access2002)
Access には標準で、データを合計する集計関数があります。

ただし、これは Excel で言えば縦計を算出するものです。
クエリなどで、フィールド内に入力済みの項目の横計を出したい場合は、ちょっと困ります。

普通は全てのフィールド名を指定して、「+」で繋げて計算させます。
ところがデータの無いものが間に挟まると、計算結果も Null となってしまい、計算してくれません。

これを避けるためには Nz関数を使用して、Null をゼロに変換します。
  例: Nz([国語],0) + Nz([理科],0) + Nz([社会],0)

これで計算はできますが、式がやたら長くなってしまいます。

仕方がないので集計が簡単に出来る関数を作ってみました。
以下のコードを標準モジュールに貼り付けてください。
Function ItemSum(ParamArray ItemEtc()) As Double
    'データのある項目の数量を集計(Sum関数の横方向版)
    '文字列としての数字も数値として集計
    '例: ItemSum([国語],[理科],[社会])
    '配列を丸ごと渡すことも可
    '2003/11/15 pPoy
    
    Dim cnt As Double
    Dim cntA As Variant
    Dim i As Variant, j As Variant
    
    cnt = 0
    cntA = ItemEtc()

    For Each i In cntA
        If IsArray(i) Then
            '配列の場合
            For Each j In i
                If IsNumeric(j) Then cnt = cnt + j
            Next
        Else
            If IsNumeric(i) Then cnt = cnt + i
        End If
    Next

    ItemSum = cnt

End Function
≪使いかた≫
    ItemSum([国語],[理科],[社会])
のように指定します。
中に入れる項目数は何個でも大丈夫ですが、必ず 「 , 」 半角のカンマでつなげてください。
コード内では、以下のように 直接指定してもOKです。(配列変数で渡すことも出来ます。)

  ItemSum("12","10",100,"",Null)

  ItemSum(Array("12","10",100,"",Null))

  ItemSum(Array("12","10",""),Array(100,Null))

この場合どれも結果は、「122」 となります。
≪注意≫
  • この関数は、クエリ内で標準の関数と同様に使用することができます。

  • コード内で変数を引数にした計算にも使用できます。
    引数には1次元配列を渡すことができます。但しネストされた配列は渡せません。

  • Null値、スペースおよび長さ零の文字列 ("") は、零となります。

  • 文字列としての数字は数値として計算します。

  • この関数は、集計関数としては使用できません。 集計クエリでは、Sum関数を使用してください。



【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
  form mail はこちら

Copyright(C) pPoy 2003