[[20250120210713]] 『複数条件に当てはまる文字列を重複は1として数えax(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数条件に当てはまる文字列を重複は1として数える』(初心者)

よろしくお願いいたします。
A列に日付、B列にグループ分けの項目があり
C〜E列に文字列(行によって3セル全て埋まっているものもあれば空白もある)
の表があるとして
同じ日付&グループの組み合わせごとに文字列の入ったセルの数を数えたいです。
その時空白は数えず、重複するものは1つとしたいです。

1月1日 Aグルーブ いちご みかん
1月1日 Bグループ ぶどう
1月1日 Aグループ みかん ぶどう すいか
1月1日 Cグループ いちご すいか

上記の表だったら

1月1日 Aグループ 4(個)
1月1日 Bグループ 1
1月1日Cグループ 2

のような計算をしたいです。(関数で出すのは数えた数字の部分だけ大丈夫です)
もしくは

1月1日 Aグループ いちご みかん ぶどう すいか
1月1日 Bグループ ぶどう
1月1日Cグループ いちご すいか

上記のように抜き出す形でもいいのですが、文字列を指定せず
複数条件で重複しない値を抜き出す方法が分かりませんでした。
説明が下手で分かりにくかったらすみません。
あまりExcelが得意ではなく、教えていただけますと幸いです。
よろしくお願いいたします。

< 使用 Excel:unknown、使用 OS:Windows10 >


 Excelのバージョンを書いた方が良いです。
 バージョンによって使える関数が異なるので。
 ここで言うバージョンとは、Excel2019とかMicrosoft365とかのことです。

 お持ちのExcelがPowerQueryを使えるバージョンだとしたら、
 私なら関数ではなく、PowerQueryを使用して、
 列のピボット解除、重複行の削除をしてから、ピボットテーブルで集計すると思います。
 結果としては、個数を数える方です。
(にわか) 2025/01/20(月) 22:14:36

コメントありがとうございます。確認したところMicrosoft365のようです。
提案ありがとうございます。
そのやり方がいいのかもしれませんが、使用したことがなく
正直出来れば関数を入れて計算したいです…が、そうなると難しいですかね。
すみません、勉強します
(初心者) 2025/01/21(火) 12:25:32

 バージョンがわかれば、関数での回答も付くと思いますし、
 Microsoft365なら、関数だけで解決できるとも思います。
 ただ私には出来ませんので、関数での解決は他の方の回答をお待ちください。
 ご自身でトライされるなら、UNIQUE関数とかFILTER関数などが使えるかもしれません。
(にわか) 2025/01/21(火) 12:39:56

 =LET(x,A1:E500,a,INDEX(x,,1),b,INDEX(x,,2),c,DROP(x,,2),
F,LAMBDA(i,[j],TOCOL(IF(i=i,IF(i="",NA(),IF(ISOMITTED(j),i,j))),3)),
d,HSTACK(F(c,a),F(c,b),F(c)),e,UNIQUE(d),
GROUPBY(DROP(e,,-1),TAKE(e,,-1),COUNTA,,0))
→左端の列の書式を日付に
または
=LET(x,A1:E500,a,INDEX(x,,1),b,INDEX(x,,2),c,DROP(x,,2),
F,LAMBDA(i,[j],TOCOL(IF(i=i,IF(i="",NA(),IF(ISOMITTED(j),i,j))),3)),
d,HSTACK(F(c,a),F(c,b),F(c)),e,UNIQUE(d),
PIVOTBY(DROP(e,,-1),TAKE(e,,-1),TAKE(e,,-1),COUNTA,,0))

(んなっと) 2025/01/21(火) 16:47:45


 GROUPBYが使えない環境のときは、さらに式が長くなります。
(んなっと) 2025/01/21(火) 16:50:30

 挑戦してみました

 =LAMBDA(rng,LET(
    x,CHOOSECOLS(rng,1,2),
    ux,UNIQUE(x),
    n,BYROW(DROP(rng,,2),COUNTA),
    HSTACK(ux,BYROW(ux,LAMBDA(r,SUM(FILTER(n,BYROW(x=r,LAMBDA(c,AND(c))))))))
 ))(A1:E4)

 ここで
 rng           :表全体
 x       :表の1列目と2列目
 DROP(rng,,2)  :表の3列目以降
 n             :表の3列目以降の各行の個数

 最新バージョンだと A1:E4 じゃなくて A.:.E でもできそう
(´・ω・`) 2025/01/21(火) 21:34:14

 GROUPBY関数が使える場合、これではどうでしょう
 =LAMBDA(rng,GROUPBY(CHOOSECOLS(rng,1,2),BYROW(DROP(rng,,2),COUNTA),SUM))(A1:E4)
(´・ω・`) 2025/01/21(火) 22:05:17

 重複削除して数えるのが面倒ですね。
=LET(x,A1:E500,a,TAKE(x,,2),b,UNIQUE(FILTER(a,TAKE(a,,1)<>"")),c,DROP(x,,2),
d,BYROW(b,LAMBDA(r,ROWS(UNIQUE(TOCOL(FILTER(c,BYROW(a,LAMBDA(i,AND(r=i)))),3))))),HSTACK(b,d))
(んなっと) 2025/01/22(水) 00:02:10

 あ、そうですね
 私のは重複削除してません。忘れてください。
(´・ω・`) 2025/01/22(水) 06:08:13

コメント返信:

[ 一覧(最新更新順) ]


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