エクセル術

Excel2003でSUMIFSを実現

過去記事[Excel2007 新関数 =SUMIFS()

過去記事[自分で関数を作ってみる



Excel2007には新関数SUMIFSというものがあります。過去記事参照。

Excel2003以前にはない関数で、大変便利な関数です。でも2003以前のバージョンでも同じような関数を使いたい!
ということでユーザー定義関数で作ってみました。

21-1.jpg



Optional引数

関数を定義する時、引数も定義します。しかし省略する引数もあると思います。

今回の場合だとSUMIFSの条件数を3つまで用意していますが、条件が2つまでで十分な場合(条件3を使用しない場合)もあります。その様な場合は条件3を省略可能な引数として定義します。


Optional ***  とする事でその引数は省略可能です。但し、省略した場合のデフォルト値を設定しておく必要もあります。


ではSUMIFSの実際のコードです

Function SUMIFS(計算範囲, 条件範囲1, 条件1, Optional 条件範囲2 = 0, _
Optional 条件2 = 0, Optional 条件範囲3 = 0, Optional 条件3 = 0)
SUMIFS = 0
For x = 1 To 計算範囲.Rows.Count
If 条件2 = 0 Then
If 条件範囲1.Rows(x) = 条件1 Then
SUMIFS = SUMIFS + 計算範囲.Rows(x)
End If
Else
If 条件3 = 0 Then
If 条件範囲1.Rows(x) = 条件1 And 条件範囲2.Rows(x) = 条件2 Then
SUMIFS = SUMIFS + 計算範囲.Rows(x)
End If
Else
If 条件範囲1.Rows(x) = 条件1 And 条件範囲2.Rows(x) = 条件2 And _
条件範囲3.Rows(x) = 条件3 Then
SUMIFS = SUMIFS + 計算範囲.Rows(x)
End If
End If
End If
Next
End Function



解説

全然スマートな書き方ではありませんが一応これで使えます。

範囲の中で一段ずつ条件が合致するか調べていき、合致すれば足していく・・・最後の行までForで繰り返します。

関数名
SUMIFS( 計算範囲 , 条件範囲1 , 条件1 , 条件範囲2 , 条件2 , 条件範囲3 , 条件3 )
機能
複数の条件に一致する数値の合計を求めます。
=SUMIFS( D2:D10 , A2:A10 , “商店A” , B2:B10 , “みかん” )



Excel2007のSUMIFSは条件数127まで使えますが、このコードでは条件3までです。いじればいくらでも増やせますが。


ちなみにユーザー定義関数でも関数ウィザードは使えます。




※注意 このSUMIFSは行(縦)に対応しており、列(横)に対応しておりません。

コード内の「Rows」を「Cols」に変えると列対応となります。


ユーザー定義関数を使わないでExcel2003でSUMIFS


モバイルバージョンを終了