Excel2003でSUMIFSを実現

マクロ / VBA

過去記事[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までです。いじればいくらでも増やせますが。


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



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

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


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


Comment

  1. yosi より:

    記述のSUMIFS大変便利に使わさせて頂いています。
    条件の設定であいまい検索例えば、みかんを例にすると、"なつみかん","紀州みかん",をまとめて、"*みかん"で集計したいのですが・・・コードを訂正すれば可能でしょうか?

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • ▼お小遣い稼ぎしませんか?▼ 日々の生活にhappyをプラスする|ハピタス

    クレジットカード・FX口座を作るだけで簡単に3万円GETです。一切支出はありません。

HLOOKUP 無料 SUMIF 置換 NA() SUMIFS XLSTART SUM 図形 TODAY COUNTIF コピペ ユーザー定義関数 テンプレート COLUMN 検索 DATE 日付 MATCH バーコード 印刷 作業効率UP 条件付き書式 INDEX フロー図 目標 ワイルドカード グラフ VLOOKUP 変換
  • 関西在住の30代サラリーマン。事務職で毎日Excelと戯れています。
    システム導入なんて資金が無い!Excelでなんとかやりたい零細中小の社長さん・事務員さんの力になればと思います。
    詳しいプロフィール


PAGE TOP ↑