[[20260322143648]] 『特定の条件を満たすとき、一定の範囲内に入力され』(むずかしい。) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『特定の条件を満たすとき、一定の範囲内に入力されたセルの個数を数えたい。ほか1』(むずかしい。)

特に質問1が知りたいです。色々な検索ワードで調べましたがかなわず、
どなたかお力添えいただけますと幸いです。よろしくお願いいたします。

【データ】
※テーブル名:TB
※A列とB列には文字列が、C〜N列には数値が入力されている。
※「ー」は空欄。

  A B C D E F G H I・・・N
1 a 〇 20 05 30 10 45 20 ー
2 b × 40 10 ー ー ー ー ー
3 b × 05 20 10 30 ー ー ー
4 a △ 10 90 10 70 ー ー ー
5 c □ 30 25 ー ー ー ー ー
6 a ☆ 10 10 ー ー ー ー ー


【質問1】
 (A列がa)かつ(B列が〇以外)の場合、
 (C、E、G、・・・M列)のうち、入力されたセルの個数を数えたい。
 その個数の、テーブル全体での合計を知りたい。

【補足】
 =SUM(IF((TB[A]="a")*(TB[B]<>"〇"),COUNT(TB[C]:TB[N])/2))

エラーを出さずに近いところまでいったのが上記式ですがダメでした。
例えば上のデータ範囲なら「3」が答えになってほしいが、「20」が
返ってきます。論理式に合致するとき、その行のTB[C]:TB[N]ではなく、
テーブル全体でのTB[C]:TB[N]を計算しているのだと思いますが、なぜ
そうなるのか分からず対処できません。新たに列を増やさずに何とかで
きないかと思っています。

【質問2】
 (B列が〇)のとき、
 C*E+D*F+G*I+H*J+K*M+L*Nの和を求めたい。
 その和の、テーブル全体での合計を知りたい。

【補足】
=SUM(IF(TB[B]="〇",TB[C]*TB[E]+TB[D]*TB[F]+TB[G]*TB[I]
          +TB[H]*TB[J]+TB[K]*TB[M]+TB[L]*TB[N]))

FILTER関数を使ってみるなどしたがうまくいかず、最終的には何となく
この式で計算できましたが、列がもっと多いときに困りそうです。もし、
よりスマートな方法がありましたらご教示願えないでしょうか。

< 使用 アプリ:excel 2024、使用 OS:Windows11 >


>「3」が答えになってほしい
(B列が〇以外)の場合なので4、6行目が該当するので6ではないですか。
(わからん) 2026/03/22(日) 15:21:02

コメントいただきありがとうございます。
4、6行目が該当するのはそのとおりです。

 =SUM(IF((TB[A]="a")*(TB[B]<>"〇"),COUNT(TB[C]:TB[N])/2))

の最後で、2で割っているので、3が答えになってほしいということです。

なぜ2で割ったかといいますと、本当はC〜N列のうち、言わば奇数列ともいうべきか、
C、E、G、I、K、M列に入力されているセルの数を数えたいのです。
ですが、隣り合わない列を複数参照しようとすると数式が複雑になるようだ、と別の個所
で学びました。そこで、「じゃあ、とりあえずC〜N列で計算して、最後に半分にすれば
よいのではないか。」と思ったことによります。
(むずかしい。) 2026/03/22(日) 15:46:10


 テーブルだと1行目は見出しではないのかな?
05は表示形式が00ですか(値は数値)?
 >FILTER関数を使ってみるなどしたがうまくいかず
FILTER関数をネストする
範囲に数値の0がないとして
=SUM(IF(FILTER(FILTER(C1:N6,(A1:A6="a")*(B1:B6<>"〇")),MOD(COLUMN(C1:N1),2))<>0,1,0))
(はてな) 2026/03/22(日) 15:52:41

>最後で、2で割っているので
式をよく見てませんでした。表だけを見てしまいました。
失礼しました。
(わからん) 2026/03/22(日) 16:04:11

>はてな 様

テーブルだと1行目見出し→そのとおりです。失礼いたしました。
05→数値です。
早速ご教示くださりありがとうございます。試してみます。

ただ、大変申し訳ないことに気づきました。
本当に、本当に申し訳ないのですが、質問2に誤りがありました。
正しくは、

 (B列が〇)のとき、
 C*D+E*F+G*H+I*J+K*L+M*Nの和を求めたい。
 その和の、テーブル全体での合計を知りたい。

でした。
イメージは、
 A列 → 商品の購入者
 B列 → 購入された商品の種類
 C、E、G、I、K、M列 → 1箱あたりに入っている商品の個数
 D、F、H、J、L、N列 → 箱数
です。
例えば1行目は、「aさんが、〇という商品の、20個入りを5箱、30個入りを10箱、
45個入りを20箱買った」ということです。(いわば、aさんは3口購入した。)

質問1は、「aさんが、〇以外の商品を何口購入したか知りたい」ということです。
質問2は、「〇という商品が、合計で何個、購入されたか知りたい」ということです。
(むずかしい。) 2026/03/22(日) 16:10:30


 質問1だけです。
 二つずつのペアが入力されていることが保証されるなら、
 =LET(
    a, FILTER(TB,(TB[列1]="a")*(TB[列2]<>"〇")),
    b, DROP(a,,2),
    SUM(--(b<>0))/2
 )
(xyz) 2026/03/22(日) 16:13:02

 質問2
 =LET(
     a, FILTER(TB,TB[列2]="〇"),
     b, DROP(a,,2),
     c, WRAPROWS(TOROW(b),2),
     SUMPRODUCT(INDEX(c,0,1),INDEX(c,0,2))
 )
(xyz) 2026/03/22(日) 16:46:12

>はてな様、xyz様

手元の実際の表にも合わせて試してみましたところ、質問1についてはご教示くださった
いずれの式でも正しい答えになりました。質問2についても、xyz様の式で同様に導け
ました。
何が行われているのかおそらく1%も理解が追い付いていないけれども、何度やっても、
表の値を変えても、答えがズバッと出ることに大変感激しております。

自分で計10〜20時間ほどは取り組んだと思うのですが、いずれも自分では絶対にたど
り着けない領域だったと思われます。本当にありがとうございました。
(むずかしい。) 2026/03/22(日) 17:19:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.