
A あ
B あ
A い
B う
C あ
B い
B あ
C あ
A い
↑のようなセルがあったとします。
これを、左側の項目ごとに、重複を無視して右側の項目の数を数えたいです。
例えば、
Aについては"あ"と"い"の2つだから2、
Bについては"あ"と"い"と"う"で3、
Cについては"あ"だけなので1
という具合です。
補助列を使ったりマクロで数えたりすればできるのですが、
関数のみを使ったやり方はないでしょうか。
※ある範囲内で重複を無視してカウントするだけなら
=SUMPRODUCT(1/SUBSTITUTE(COUNTIF(範囲,範囲),0,0))
でできました。
これを使って、Aについて、Bについて、Cについての条件も
加えようとしましたが、
やり方がわかりません。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
例データ
A2:A12(第1行は空白とする)
1セルに「A あ」のように値が入っているとする。A,B列に分かれて入っているのではないということ)
A あ
B あ
A い
B う
C あ
B い
B あ
C あ
A い
A う
B え
Aの行について
=SUM((LEFT(A2:A12,1)="A")*(COUNTIF(OFFSET($A$2,0,0,ROW(A2:A12)-1),A2:A12)=1)*1)
と入れてSHIFT,CTRL,ENTERの3つのキーを同時押しする。
配列数式。
結果 3
ーー
Bの列については、同じく
=SUM((LEFT(A2:A12,1)="B")*(COUNTIF(OFFSET($A$2,0,0,ROW(A2:A12)-1),A2:A12)=1)*1)
と入れてSHIFT,CTRL,ENTERの3つのキーを同時押しする。
結果 4
配列数式に関心があるものなので、やってみた。
配列数式はSUMPRODUCT関数と双対的のようなので、そちらで出来るかも。
多数例で正しいかチェックして無いのでよろしく。
No.3
- 回答日時:
こんな感じでは
=SUMPRODUCT((MATCH(A1:A9&B1:B9,INDEX(A1:A9&B1:B9,),0)=ROW(A1:A9))*(A1:A9="A"))
ありがとうございます。
まさに求めていた回答です。
ちょっとまだ私の知識ではその式の意味までは理解できないですが、
各関数について調べて理解しようと思います。
SEか何かをされているのでしょうか?

No.2
- 回答日時:
A B C D E F G
1 fld1 fld2 fld3 fld4 fld1 fld4
2 A あ A_あ 1 A 2
3 B あ B_あ 0.5 B 3
4 A い A_い 0.5 C 1
5 B う B_う 1
6 C あ C_あ 0.5 合計/fld4
7 B い B_い 1 fld1 合計
8 B あ B_あ 0.5 A 2
9 C あ C_あ 0.5 B 3
10 A い A_い 0.5 C 1
C2: =A2&"_"&B2
D2: =1/COUNTIF(C$2:C$10,C2)
G2: =SUMPRODUCT((A$2:A$10=F2)*(D$2:D$10))
参考までに、範囲 F6:G10 には範囲 A1:D10 を[データ範囲]とする[ピボットテーブルレポート]による結果を示しておきました。
この回答への補足
ありがとうございます!
教えていただいた上記の方法でできました。
C2、D2の補助列を使わずに、
一気に一行だけで関数を組み合わせてやることは
可能でしょうか?
補助列を使わないやり方はsige1701さんのやり方でできました。
mike_gさんのやり方もとても参考になりました。
ありがとうございました。
No.1
- 回答日時:
こんばんは!
参考になるかどうか判りませんが・・・
↓の画像のように表を作ってみました。
作業列としてA列を3回挿入しています。
A2セルは
=IF(COUNTIF($D$2:D2,D2)=1,ROW(A1),"")
B2セルは
=IF(C2="","",IF(COUNTIF($C$2:C2,C2)=1,ROW(A1),""))
C2セルは
=D2&E2
として、A2~C2セルを範囲指定した後に、オートフィルで下へコピーします。
(数式は1000行目まで対応できるようにしていますので、1000行くらいまでコピーしても構いません)
そして、G2セルに
=IF(COUNT($A$2:$A$1000)>=ROW(A1),INDEX($D$2:$D$1000,SMALL($A$2:$A$1000,ROW(A1))),"")
H2セルに
=IF(G2="","",SUMPRODUCT(($D$2:$D$1000=G2)*($B$2:$B$1000<>"")))
という数式を入れ、G2・H2セルを範囲指定の後、これもオートフィルで下へずぃ~~~!とコピーすると
画像のような感じになります。
(新しくデータが増えても対応できるようにしています)
作業列が多すぎて目障りであれば作業列を「表示しない」にしてもOKかと思います。
以上、参考になれば幸いですが、
少し手間がかかりますので
他に良い方法があれば読み流してくださいね。m(__)m

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
「テキストデータで送ってくだ...
-
列が255以上のCSVファイルをAcc...
-
access vbaでフォームを開くと...
-
アクセスで教えてください。 電...
-
レポートの印刷を一括ではなく...
-
Access VBA を利用して、フォル...
-
Access で半角スペースと全角ス...
-
アクセスの更新クエリでカレン...
-
accessでlaccdbファイルが削除...
-
Access DAOのExecuteメソッドの...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
accessのフォームに設置したボ...
-
アクセスで教えてください。 住...
-
windowos 11 Microsoft Edgeを...
-
AccessからExcelを開いて閉じて...
-
Accessデータベースの主キーに...
-
Accessのルックアップ
-
Accessデータベースを開くと同...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
「テキストデータで送ってくだ...
-
access vbaでフォームを開くと...
-
ACCESS VBA でのエラー解決の根...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
Access Error3061 パラメータが...
-
access2021 VBA メソッドまたは...
-
Accessのクエリの結果を、既存...
-
Accessでレポートを印刷する時...
-
Microsoft365にAccessってあり...
-
列が255以上のCSVファイルをAcc...
-
Access の SetFocus について教...
-
Access 複数条件検索の設定が上...
-
accessでlaccdbファイルが削除...
-
Accessでフォームに自動入力し...
-
Access VBA [リモートサーバー...
-
Excelを開く時と閉じる時に一度...
-
access2019の起動が遅い
-
Accessのリンクテーブルのパス...
おすすめ情報