- ベストアンサー
SUMIF関数のアドバイスをください
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
提示の画像には列記号と行番号が表示されていませんのでA1~D20と判断します。 Excelの関数ではセルの塗りつぶしの色を検索できませんのでセルの値(文字列を含む)で検索することになります。 SUMIFまたはSUMIFS関数で集計可能です。 B18に次の数式を定義して右へD18セルまでコピーし、B18:D18を下の19行目へまとめてコピーします。 =SUMIF($A$3:$D$17,LEFT($A19,2)&"*",B$3:B$17) B20:D20はSUM関数でも十分かと思います。 強いてSUMIFS関数を使う場合はB18セルの条件を修正してください。 =SUMIF($A$3:$D$17,RIGHT($A20,2),B$3:B$17)
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1742/2617)
文字で判別できる場合には B18 =SUMIF($A$2:$A$17,"既存*",B2:B17) B19 =SUMIF($A$2:$A$17,"新規*",B2:B17) B20 =SUMIF($A$2:$A$17,"合計",B2:B17) それぞれ右へコピー 色で判別したい場合は ユーザー定義関数を作成します。 ただし、条件付き書式での色付けには対応できません(エクセルの仕様です) 標準モジュールに Function COLORSUMIF(ByRef aRange As Range, ByVal mStr As String, ByRef tRange As Range) Dim c As Range Dim mColor As Long Dim Cnt As Long: Cnt = 0 Application.Volatile Select Case mStr Case "既存" mColor = 16777215 Case "新規" mColor = 65535 Case "合計" mColor = 5296274 Case Else End Select For Each c In aRange If c.Interior.Color = mColor Then Cnt = Cnt + Cells(c.Row, tRange.Column).Value End If Next COLORSUMIF = Cnt End Function として B18 =colorSUMIF($A$2:$A$17,"既存",B2) B19 =colorSUMIF($A$2:$A$17,"新規",B2) B20 =colorSUMIF($A$2:$A$17,"合計",B2) B20は普通のSUMIFでいいと思いますが一応入れてます。 それぞれ右へコピー 色を変更した場合F9キーを押すか、何かの値をどこかに入力するかF2キーを押してエンターするなどセルの編集操作が必要です。 mColorの数値はマクロの記録で本来の色をセルに塗ってコードから数値を取得してください。
- SI299792
- ベストアンサー率47% (788/1646)
- imogasi
- ベストアンサー率27% (4737/17070)
「エクセル関数」の基礎的な知識が無いようだ。初心者かな? 関数はセルの値を使って、セルの値を決めるもの。 エクセルは、シートの書式の色設定(これはセルの値ではない)は、捉えることは出来ないのだ。 ただ、エクセル365などから、スピル、ラムダ関数、SEQUENCE関数など、関数においても、従来の枠(従来の常識)を超える動きがあるので、将来はどうなるかは判らないが。 ーー (VBA利用方法) VBAなどによって、空き列に、塗りつぶしの色別のコードを作れば、そのコードを頼りに、 SUMIF(s)関数で判別できるかも。 でも、それができるレベルならVBAでやれば、ということでもある。 ただしVBAは塗りつぶしの色の変更に反応しない。 ーー (条件付き書式の条件に立ち返る方法ーSUMIFの条件部分に移行させる) もう一つ、塗りつぶしの色を判別するセルのデータの内容を調べ(ホームー条件付き書式ー数式を使用して・・ならば、その数式を見れば、SUMIF(S)関数の条件に、移しやすいと言えるかもしれない。数式を使わない場合も、「セルの値に基づいて」のように、「より小さい」などの指定を使っている場合は、SUMIF(S)関数の条件に、移しやすいと言えよう。 こういうことを知って、本質問を考え直してみるべきと思う。