Excel2003でSUMIFSを実現
|
|
マクロ / VBA |
過去記事[Excel2007 新関数 =SUMIFS()]
過去記事[自分で関数を作ってみる]
Excel2007には新関数SUMIFSというものがあります。過去記事参照。
Excel2003以前にはない関数で、大変便利な関数です。でも2003以前のバージョンでも同じような関数を使いたい!
ということでユーザー定義関数で作ってみました。
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]
関連記事
- 前の記事
- セルにある文字列を分裂させる
- 次の記事
- 利息計算
Comment
記述のSUMIFS大変便利に使わさせて頂いています。
条件の設定であいまい検索例えば、みかんを例にすると、"なつみかん","紀州みかん",をまとめて、"*みかん"で集計したいのですが・・・コードを訂正すれば可能でしょうか?