1617968806 Excelの関数である列を集計する際、指定の別の列に特定の値を含む場合、値を2倍にしてカウントしたいです


今、図のようなエクセルのシートがあります。
(ファイルもこちらにあります。https://xfs.jp/pB7ImT

「商品コード」という列に、"天丼"、"カレー"、"ラーメン"という値が入っています。

COUNTIF関数を使って「=COUNTIF(B2:B14,"天丼")」とセルに入力すれば、その数が"5"であると集計することは、私にもできるのですが。

今回は、隣の「メニューID」列に"B"or"C"が入っていた場合、重複してカウントする」という条件で、集計したいのです。
例えば、図の赤字箇所にありますように。
このルールで集計した場合、"天丼"を含む5行のうち、3行は「メニューID」列に"B"と"C"が含まれるため、倍の"2"としてカウントしなくてはなりません。
そのため、2倍集計の"天丼"の結果としては"8"という値を出したいのです。

同様に、"カレー"は"B"を3行含むので"7"になり、"B"と"C"を合わせて2行含む"ラーメン"は"6"と出したいのです。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2021/04/10 10:29:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:moon-fondu

これを、他のセルに値等を仮に入れることなく、関数で実現することは可能でしょうか。

いくつかの関数の組み合わせで出来るような気もするのですが、頭を抱えております。

お力添えいただけますと幸いです。

よろしくお願い致します<m(__)m>

ベストアンサー

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

ポイント1500pt

「配列数式」を使うと、表の方に手を加えなくてもいけそうです。

質問の画像のシートで、B20 のセルに以下の式を打ち込んで、Ctrlキーと Shiftキーを押しながら Enterキーを押してください。

=SUM(IF($B$2:$B$14=A20,IF(ISERROR(FIND($C$2:$C$14,"BC")),1,2),0))

普通であれば、Enterキーを押してセルのデータを確定するところを、「Ctrlキーと Shiftキーを押しながら」というのが大切です。


「配列数式」については、「excel 配列数式 sum」というキーワードでググると、似たような事例を説明しているページが引っかかります。



実物の方は見られないので制限を書いておくと、C列のメニューID は 1文字であることが前提です。

id:moon-fondu

a-kuma3さんありがとうございます、うまくいきました!

配列数式も複雑ですね、勉強します

2021/04/10 10:28:54
id:a-kuma3

ぼくも配列数式は滅多に使いません。手札のひとつとして持ってはいますけれど。

指定が無ければ、ぼくも列を増やす方向で、まず考えます。

該当の表に手を入れられない、という条件が付くなら、以下の手段を取ることが多いと思います。

  • シートを増やして、そちらに列を増やす
  • VBA で関数を作る
2021/04/10 11:18:15

その他の回答1件)

id:aSayuri No.1

回答回数97ベストアンサー獲得回数21

ポイント500pt

 

https://xfs.jp/y8C4bP

 

https://xfs.jp/NW8U9v

 

エクセルデータを作成しましたので、

上記URLよりダウンロードして、

ご確認いただきますよう

よろしくお願いいたします。

 

 

id:moon-fondu

aSayuriさんありがとうございます!

「=IF($B12=M$1,1+IF(OR($C12="B",$C12="C"),1,0),0)」という式、勉強になります。

もしBかCに一致した場合、1を+して、一致しないと0を+なので変化なし、というわけなのですね。


ただ実は、別セルで個別に計算して合算する方法もあるかと思いますが、個別に使えない事情がありまして…実は、実際のシステムは表のレイアウトが固定されて編集できないため、一行の式で算出しないといけない状況なのです( ;∀;)


B列の値、"天丼"と"カレー"と"ラーメン"等に特に規則性もありません。

色々な値が不規則に数千行、並んでおります。

条件一致のCOUNTIF関数で集計する際に、「メニューID列」の"B"or"C"の場合は2倍計上する条件を加えて、最終的に集計するというのを一行の関数式で可能でしたら。


度々のお願いで恐れ入りますが、お教えいただけないでしょうか。

よろしくお願い致します。

2021/04/10 07:36:32
id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント1500pt

「配列数式」を使うと、表の方に手を加えなくてもいけそうです。

質問の画像のシートで、B20 のセルに以下の式を打ち込んで、Ctrlキーと Shiftキーを押しながら Enterキーを押してください。

=SUM(IF($B$2:$B$14=A20,IF(ISERROR(FIND($C$2:$C$14,"BC")),1,2),0))

普通であれば、Enterキーを押してセルのデータを確定するところを、「Ctrlキーと Shiftキーを押しながら」というのが大切です。


「配列数式」については、「excel 配列数式 sum」というキーワードでググると、似たような事例を説明しているページが引っかかります。



実物の方は見られないので制限を書いておくと、C列のメニューID は 1文字であることが前提です。

id:moon-fondu

a-kuma3さんありがとうございます、うまくいきました!

配列数式も複雑ですね、勉強します

2021/04/10 10:28:54
id:a-kuma3

ぼくも配列数式は滅多に使いません。手札のひとつとして持ってはいますけれど。

指定が無ければ、ぼくも列を増やす方向で、まず考えます。

該当の表に手を入れられない、という条件が付くなら、以下の手段を取ることが多いと思います。

  • シートを増やして、そちらに列を増やす
  • VBA で関数を作る
2021/04/10 11:18:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません