[[20250729163249]] 『特定の行を抽出して、抽出した行の数字をカウント』(みかん) ページの最後に飛ぶ

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

| 全文検索 | 過去ログ ]

 

『特定の行を抽出して、抽出した行の数字をカウント』(みかん)

特定の行を抽出して、その行の特定の範囲内の0以上の数字の数をカウントする方法を教えてほしいです。

【詳細】

  a  b   c  d  e  f    aa   ab   cc
1 12 リンゴ 15  0  23  0 1   ネギ   
2 35 ゴボウ  0  0  0  3    2   キノコ
3 152 ミカン 25  8  4  1    3   モヤシ
4 12 リンゴ  1  1  2  0
5 152 ミカン  5  0  0  4

上記のような表を使います。

aは種類番号
bは品名
c〜fは売上数量

aは1から数字がランダムにあり、同じ数字なのに行が違うのは品種が違うため違う行になっている設定です。
aaの数字はもっと下まで続いていて、aで使われている番号は同じです。
同じシート内の他のセル(aa〜ab)に一覧表があり、ccに売上回数を入れたいです。
これは毎月出るもので毎度バラバラです。

色々試したのですが分からないのでお力をお貸しください。
日本語がおかしな点が多々あるかと思いますが
不明点等ございましたらお聞きください。
よろしくお願い致します。

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


説明がおかしい点が多々ある。

まず、どのような前提があって、その結果どのように出力したいかが不明。
上の例だと、ネギやキノコやモヤシが唐突に出てきているけど、a〜fにはない。
なので、リンゴやミカンで具体的な数字を示しながら説明すべきだと思うが違う?
あと、細かいことだけど、aa,ab,ac ではなくて、aa,ab,cc なの?

(ホリ) 2025/07/29(火) 17:40:37


 とは言いつつ、全くの感で。

 AC1 =SUM(FILTER(C$1:F$5,B$1:B$5=AB1)) 下にコピー。

 知らんけど。

(ホリ) 2025/07/29(火) 17:49:40


 >0以上の数字の数をカウント
 0は含まないんだよね?
 リンゴ「5」、ゴボウ「1」、ミカン「6」になればいいの?

 集計表がH列〜J列の場合

 J1:=SUM((FILTER(C:.F,A:.A=H1,0)>0)*1)

 :. はタイプミスに非ず(トリム参照)

(夏の思い出) 2025/07/29(火) 20:19:16


>売上回数を入れたいです。
抽出した行の数字をカウントしたものがどうして売上回数になるんですか。

(はてな) 2025/07/29(火) 21:34:43


>抽出した行の数字をカウントしたものがどうして売上回数になるんですか。
>(はてな) 2025/07/29(火) 21:34:43

1以上の売上数量の個数=売上回数では?

(夏の思い出) 2025/07/29(火) 22:03:45


 想定結果が書かれていないのが致命的ですね。折角の例示が半分しか意味をなしていないですよ。

 リンゴは品種を問わずに、日ごとにいったん合計(1行目と4行目合計)したレベルで
 売り上げ有無を判定する、といった考え方もあるかもしれないですね。

 いずれにせよ、売上があった日数の合計といった集計用の列を作るのが分かりやすいかも知れません。
 そういう見方をするなら、そのための中間項目は見た目で確認するためにも必要になるんですから。
 中間項目の作成を忌避して話を難しくする必要はないと思います。(COUNTIFとSUMIFでできます)
 なお、上記の考え方をとるなら、さらにリンゴ、ゴボウ、ミカンといった種類ごと合計もあってよいでしょう。

 なお、上記の考え方を仮にとるならこんな感じでしょうか。
 AC1セルに以下の式を入れ、下にコピーします。

 =LET(
     _COMMENT_,"種類別の売り上げは一旦品種を問わずに合計したうえで、その日の売上有無を判定する",
     ary,C.:.F,
     header,A.:.A,
     total,BYCOL(ary,LAMBDA(d,SUM(FILTER(d,header=AA1)))),     
     SUM(1*(total>0))
 )
 数式の最初の半角スペースは入れずに、コピーして下さい。

(xyz) 2025/07/30(水) 09:16:58


よく見たら
>c〜fは売上数量
>範囲内の0以上の数字の数をカウント
だった。

それなら先の

 AC1 =SUM(FILTER(C$1:F$5,B$1:B$5=AB1)) 下にコピー。

は全く的外れでしたね。

ならば、こんなんでも。

 AC1 =SUM((B$1:B$5=AB1)*(C$1:F$5>0)) 下にコピー。

ただし、
>特定の行を抽出して という要件はよく分からないので無視。

いずれにしても、
>不明点等ございましたらお聞きください。
とあるから聞いてんのに、その答えが全く返ってこないのはどういうこと?

(ホリ) 2025/07/30(水) 10:11:28


おかしな点が多いのにもかかわらず、沢山ご回答いただきありがとうございます。
一つずつ返信したいところですが、まとめてお返事させていただきます。
まず、aa、ab、ccのところは間違えました、ccではなくacです。
そしてaは下までずっと続いていて、数字はランダムである想定です。
売り上げがあった日数の合計という表現の方が正確でした。
数々のご指摘いただきありがとうございます。
ご教授頂いた式を試してみます。
(みかん) 2025/07/30(水) 10:16:54

改めて想定結果を示すという考えは全くないんですか?
(xyz ) 2025/07/30(水) 10:27:43

想定結果をお送り致します。
入力が遅くてすみません。

想定結果
aa   ab   ac
1   ネギ   0
2   キノコ  2
3   モヤシ  0


12  リンゴ  5



35  ゴボウ  1



152  ミカン  6

このように表示される予定です
ネギ・モヤシは1度も売り上げなかったので0となっている想定です
わかりずらく申し訳ございません
(みかん) 2025/07/30(水) 11:12:09
 


>ネギ・モヤシは1度も売り上げなかったので0となっている想定です
だったら、上の例だとキノコも1度も売り上げてないよ。細かいけど。

>日本語がおかしな点が多々あるかと思いますが
日本語の話ではない。
整合性を保って、人が聞いて理解できるかどうかを考えながら、分かりやすく説明しようとする姿勢が必要。
その姿勢がないから、
>わかりずらく申し訳ございません
となってしまうのでは?

(ホリ) 2025/07/30(水) 14:43:06


 結局、こんなのでいいのかな?

 AC1セル =LET(ary,C.:.F,header,A.:.A,BYROW(AA.:.AA,LAMBDA(cd,SUM((header=cd)*(ary>0)))))

 <結果図>
 行 _A_ ___B___ _C_ _D_ _E_ _F_ :   _AA_ __AB__ AC
  1  12 リンゴ   15   0  23   0 :      1 ネギ    0
  2  35 ゴボウ    0   0   0   3 :      2 キノコ  0
  3 152 ミカン   25   8   4   1 :      3 モヤシ  0
  4  12 リンゴ    1   1   2   0 :      4         0
  5 152 ミカン    5   0   0   4 :   ・           0
  6                             :   ・           0
  7                             :     12 リンゴ  5
  8                             :   ・           0
  9                             :     35 ゴボウ  1
 10                             :   ・           0
 11                             :    152 ミカン  6

(半平太) 2025/07/30(水) 16:49:36


 仮に横方向が日付と考えると、
 その計算だと一ヶ月間に売上があった日数を求めた時、
 50日、80日などと品種が多いものは31日(一か月)を軽く超えてしまうことがあります。
 これは使用目的に即しているんでしょうか?
 品種の数で割るとか、私案のようにするとかなにか正規化が必要では?

 # まあ基本的にご自分の自由ですけど、私個人としてはちょっと気になりました。
 # それに譬え話であって八百屋さんじゃないだろうし。発生頻度がごく稀なものなら、
 # 上記のような心配は不要ですけれども。

 これだけだと何なので、上記の私案に沿ったものを示して閲覧者の参考に供します。
 =LET(
      ary,C.:.F,
      header,A.:.A,
      fn,LAMBDA(goods,
          LET(
              total,BYCOL(ary,LAMBDA(d,SUM(FILTER(d,header=goods,0)))),
              SUM(1*(total>0))
         )
     ),
     BYROW(AA.:.AA,LAMBDA(goods,fn(goods)))
 )
 確かに前回のものだと(単にコピーする方式だと)各行で共通する計算を重複してしている訳でマズかった。
 BYROWでまとめて計算して吐き出すのが効率は良いのでした。

(xyz) 2025/07/30(水) 20:20:45


=IF(AA1="","",SUMPRODUCT(($A$1:$A$1000=AA1)*($C$1:$F$1000>0)))
(・・・) 2025/07/30(水) 20:55:09

沢山のご回答ありがとうございます。
わかりずらい質問だったのにもかかわらず、丁寧に教えて頂きありがとうございました。
この後試してみます。
(みかん) 2025/07/31(木) 09:07:18

 試した結果を知らせてください。
(xyz) 2025/08/01(金) 13:00:56

 何を悩んでいるのか知らんけど

 G列を作業列にして 
=IF(F1="","",COUNTIF(C1:F1,">0")) 下にフィル

 AC1
=SUMIF(A:A,AA1,G:G) 下にフィル

(難しく考えなくても) 2025/08/01(金) 13:39:40


昨日は月末で結局試しができませんでした。すみません。
先ほど試してみたところ、無事結果が出ました。
コメントしてくださった皆様、ご対応頂きありがとうございました。
(みかん) 2025/08/01(金) 14:31:03

コメント返信:

[ 一覧(最新更新順) ]


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