Excel で複数の条件に基づいて範囲内の一意の値の個数をカウントする方法は?
実務では、単に値を数えるだけでなく、特定の条件を満たすユニークなアイテムの数を把握する必要が頻繁にあります。たとえば、特定の営業担当者が販売した異なる製品の種類数や、特定の期間内に注文された一意の注文件数を調べたい場合などがその例です。こうしたタスクをExcel で効率的にこなすには、適切な数式やピボットテーブルなどの高度な機能、あるいはカスタム VBA ソリューションを活用することが鍵となります。本記事では、1 つまたは複数の条件に基づいて範囲内の一意の値をカウントするための実践的な手法を、ステップ・バイ・ステップの解説と役立つヒントとともにご紹介します。
範囲内の一意の値の数を数えると PivotTable(重複しない個数、Excel 2013 以降)
VBA コードによる範囲内の一意の値の数を数える(複雑/自動化が必要なケース向け)
1 つの条件に基づく範囲内の一意の値の数を数える
一般的なケースとして、Tom が販売した異なる製品の数を数える場合を考えてみましょう。この方法は、シンプルなデータセットにおいて、営業担当者1 名の販売記録など単一の条件に基づいて重複を除いた件数を把握したいときに最適です。配列数式を慎重に使用する必要がありますが、比較的簡単に実現できます。

このシナリオでは、空白セル(例:セル G2)に次の数式を入力します:
=SUM(IF(「Tom」=$C$2:$C$20,1/(COUNTIFS($C$2:$C$20, 「Tom」, $A$2:$A$20, $A$2:$A$20)),0))
数式を入力したら、Ctrl + Shift + Enter(Enter キーだけではありません)を押して、配列数式として確定してください。すると、数式バーの数式の両側に波括弧が表示され、下図のように即座に結果が反映されます:

注記:
- 「Tom」は結果をフィルターするための条件です。より柔軟性を持たせたい場合は、「Tom」を別のセル(例:$F$2)への参照に置き換えることができます。
- $C$2:$C$20 には、評価対象の営業担当者名が含まれています。
- $A$2:$A$20 は、重複を除いた件数を取得したい製品の列です。
- データ範囲を変更した場合は、参照範囲も合わせて調整してください。
ヒント:Excel 365 またはExcel 2019 以降をご利用の場合は、UNIQUE 関数とFILTER 関数を組み合わせることで、さらに簡単に数式を作成できます。
#DIV/0! エラーが発生した場合は、条件を再度確認し、指定した範囲の長さが等しいことをご確認ください。
2 つの指定日付に基づく範囲内の一意の値の数を数える
特定の日付範囲(例:2016 年9 月1 日~2016 年9 月30 日に販売されたすべてのユニークな製品)でユニークなアイテムの数を調べる必要がある場合は、このアプローチをご活用ください。月次、四半期、またはカスタム日付範囲など、特定の期間におけるデータの傾向を分析する際に特に効果的です。ただし、日付の書式がワークシート上の日付値と一致していることを必ずご確認ください。
結果を表示したい空白セルに、次の数式を入力します:
=SUM(IF($D$2:$D$20=DATE(2016,9,1)),1/COUNTIFS( $A$2:$A$20, $A$2:$A$20, $D$2:$D$20, 「=」&DATE(2016,9,1)))、0)
数式を入力したら、Ctrl + Shift + Enterを押して、配列数式として実行してください。下図にその結果の例を示します:

注記:
- 2016,9,1および2016,9,30は、それぞれ開始日と終了日の条件です。必要に応じてこれらの値を変更したり、動的な日付フィルターにセル参照を使用することもできます。
- $D$2:$D$20 には、チェック対象の日付エントリが含まれています。
- $A$2:$A$20 は、重複を除いた件数を再度取得したいアイテムまたは製品の列です。
- 日付がテキスト文字列ではなく、有効なExcel の日付形式で保存されていることをご確認ください。期待通りの結果が表示されない場合は、日付の書式設定と対象範囲を再度ご確認いただきますようお願いいたします。
ヒント:地域ごとの日付書式の問題を回避するには、DATE(年, 月, 日)ぜひ関数をご活用ください。動的範囲を使用する際は、可読性をさらに高めるために名前付き範囲の利用もおすすめです。
2 つの条件に基づく範囲内の一意の値の数を数える
Tom が9 月に販売した製品のみを分析したい場合、つまり「名前」と「日付範囲」の両方を条件として、重複を除いた件数を取得するシナリオを想定します。このようなケースは、期間ベースのパフォーマンスレビューまたはセグメント分析でよく見られます。条件が増えるにつれて数式は複雑になるため、データの正確性には一層注意を払う必要があります。
以下の数式を H2 などの空白セルに入力します:
=SUM(IF((「Tom」=$C$2:$C$20)*($D$2:$D$20=DATE(2016,9,1))),1/COUNTIFS($C$2:$C$20, 「Tom」, $A$2:$A$20, $A$2:$A$20, $D$2:$D$20, 「=」&DATE(2016,9,1)))、0)
数式を入力したら、Ctrl + Shift + Enterを押して確定してください。すると、すぐに重複を除いた件数が表示され、下図のようになります:

注記:
- 「Tom」は名前の条件であり、「2016,9,1」および「2016,9,30」は日付範囲を示しています。必要に応じてこれらの値を調整するか、セル参照を使って動的に設定することも可能です。
- $C$2:$C$20 はスタッフ(またはその他の第1 条件)列、$D$2:$D$20 は日付列、$A$2:$A$20 には重複を除いた件数を取得したいアイテムが含まれています。
- エラーを防ぐには、すべての範囲が同じ長さである必要があります。
「または」条件(例:Tom または南部地域で販売されたユニークな製品を数える)を使用したい場合は、次の数式を利用できます。これにより検索条件の範囲が広がりますが、データが両方の条件に該当する場合、結果が重複する可能性があります:
=SUM(--(FREQUENCY(IF((「Tom」=$C$2:$C$20)+(「South」=$B$2:$B$20), COUNTIF($A$2:$A$20, "0))
Ctrl + Shift + Enterを忘れずに押してください。下図のように結果が表示されます:

ヒント:OR 条件を適用する際は、同じレコードが両方の条件を満たす場合、重複カウントが発生する可能性がある点にご注意ください。大規模なデータセットでは、パフォーマンスに影響が出ることがあります。
範囲内の一意の値の数を数える(3 つの条件に基づく)
一部の分析では、「9 月に北地域でのみトムが販売した固有の製品を特定する」など、3 つ以上の条件を組み合わせる必要がある場合があります。こうした多次元的なデータ分析は、レポート作成やターゲットを絞ったビジネスインサイトにおいてよく見られるケースです。このような複合的なロジックを正確に扱うには、参照範囲の管理を慎重に行うことが不可欠です。
この配列数式を空白セル(例:I2)に入力します:
=SUM(IF((「Tom」=$C$2:$C$20)*($D$2:$D$20=DATE(2016,9,1))*(「North」=$B$2:$B$20),1/COUNTIFS($C$2:$C$20, 「Tom」, $A$2:$A$20, $A$2:$A$20, $D$2:$D$20, 「=」&DATE(2016,9,1), $B$2:$B$20, "North")),0)
完了するには、Ctrl + Shift + Enterを押してください。参考までに、以下にサンプル結果を示します:

高度な条件を使用する場合は、すべての範囲が整合しており、日付やテキストなどのデータ型が正しいことを再度確認してください。範囲のずれはエラーや誤った結果を引き起こす原因になります。
ヒント:
- 大規模なデータセットでパフォーマンスの問題が発生した場合は、数式を分割するか、Excel のPivotTable 機能をご活用ください。
- 名前付き範囲やセル参照をすべての条件に活用すれば、数式がより読みやすくなり、エラーも減らせます。
- 頻繁に使用する場合は、これらの数式を名前付きセル参照やカスタム関数として保存することをおすすめします。
範囲内の一意の値の数を数える(固有カウント、Excel 2013+)を PivotTable で使用
Excel 2013 以降をご利用のユーザーは、PivotTable を使用することで、1 つまたは複数の条件に基づく範囲内の一意の値の数を数えるの代替として、対話的で数式を使わない方法を利用できます。「固有カウント」機能を使うと、大規模なデータセットを効率的に集計・フィルターできるため、動的でレポート中心の環境に特に適しています。ただし、Excel の古いバージョンでは、PivotTable 内での固有カウント機能はサポートされていない点にご注意ください。
この方法の使い方:
- データセットを選択して、挿入>ピボットテーブルをクリックしてください。
- 「ピボットテーブルの作成」ダイアログボックスで、ピボットテーブルの配置場所を選択し、「このデータをデータモデルに追加する」チェックボックスをオンにしてから、OKをクリックしてください。
- 重複を除いた件数を取得したいフィールド(例:製品)を「値」エリアにドラッグします。デフォルトでは「…の個数」として表示されます。
- 「値」エリア内のフィールドをクリックして、値の集計方法を選択してください。
- ポップアップダイアログで下にスクロールし、重複しない個数を選択してください(このオプションはExcel 2013 以降でのみ利用可能で、「このデータをデータモデルに追加する」オプションを有効にしてピボットテーブルを作成した場合に表示されます)。
- 条件フィールド(例:営業担当者、地域、日付)を「レポートフィルター」または「行/列」エリアに追加して、単一または複数の条件を適用します。
- これにより、選択した条件でフィルターされた値の重複を除いた件数がピボットテーブルに表示されます。
メリット:視覚的に分かりやすく、数式を編集することなくフィルターを簡単に調整できるため、対話型レポートに最適です。
制限事項:Excel 2010 以前ではご利用いただけません。また、新しいデータを追加した際は、ピボットテーブルを手動で更新する必要があります。
実用的なヒント:同じレコード内に意図しない重複が含まれていないか、常にソースデータを確認してください。「固有カウント」オプションが表示されない場合は、ピボットテーブルを再作成し、「このデータをデータモデルに追加する」オプションをオンにしてください。
範囲内の一意の値の数を数える(VBA コードによる方法:複雑または自動化が必要なケース向け)
非常に大規模なデータセットを扱う場合や、頻繁に同じ分析を繰り返す必要がある場合など、さまざまな条件に基づいて自動的に範囲内の一意の値の数を数えるを行う必要が生じることがあります。そのような状況では VBA マクロが最適です。一度設定すれば、マルチ条件フィルタリングを含むさまざまなロジックを手動操作なしで迅速に処理できます。ただし、VBA は通常のExcel 機能よりも高度なため、マクロに慣れているユーザー、または継続的な分析ニーズを持つユーザーに適しています。
操作手順:
- Alt + F11を押して VBA エディターを開きます。挿入>標準モジュールを選択し、新しいモジュールを作成します。
- 次の VBA コードをモジュールにコピー&ペーストします:
Sub CountUniqueWithCriteria()
Dim DataRange As Range
Dim CriteriaRange As Range
Dim CriteriaValue As Variant
Dim Dict As Object
Dim i As Long
Dim UniqueCount As Long
Dim ResultCell As Range
Set Dict = CreateObject("Scripting.Dictionary")
' Prompt for range settings
Set DataRange = Application.InputBox("Select data range (items to count):", "KutoolsforExcel", Type:=8)
Set CriteriaRange = Application.InputBox("Select criteria range (e.g. Salesperson):", "KutoolsforExcel", Type:=8)
CriteriaValue = Application.InputBox("Enter criteria value:", "KutoolsforExcel", "", Type:=2)
Set ResultCell = Application.InputBox("Select cell for result output:", "KutoolsforExcel", Type:=8)
On Error Resume Next
For i = 1 To DataRange.Rows.Count
If CriteriaRange.Cells(i, 1).Value = CriteriaValue Then
If Not Dict.Exists(DataRange.Cells(i, 1).Value) Then
Dict.Add DataRange.Cells(i, 1).Value, 1
End If
End If
Next i
UniqueCount = Dict.Count
ResultCell.Value = UniqueCount
MsgBox "Unique count for '" & CriteriaValue & "': " & UniqueCount, vbInformation, "KutoolsforExcel"
End Sub - VBA エディターを閉じてワークシートに戻ったら、Alt + F8を押して、CountUniqueWithCriteriaを選択し、マクロを実行します。
- 表示されるプロンプトに従い、データに応じて範囲と条件を指定してください。結果は選択したセルとメッセージボックスの両方に表示されます。
パラメーターの説明と注意点:
- このマクロは現在、1 つの条件にのみ対応しています。複数の条件に対応させるには、ループ内の
If ... Thenロジックをカスタマイズしてください。 - マクロを実行する前に、必ずブックを保存してください。マクロによる変更は元に戻すことができません。
- 実行エラーが発生した場合は、Excel の設定でマクロを有効にしてください。
- この方法は、手動の数式では煩雑になるような大規模または頻繁に更新されるデータに適しています。
メリット:高度なカスタマイズが可能で自動化にも対応。大規模かつ変化するデータセットを効率的に処理でき、高度なワークフロー構築や繰り返しの作業に最適です。
デメリット:マクロを実行するには許可が必要で、初心者の方は VBA 操作に慣れるまで少し時間がかかることがあります。
条件に基づく固有値のカウントを行う際は、常に参照範囲を確認し、すべての条件列のサイズが揃っていることを保証してください。範囲の不一致は、エラーや誤った結果の一般的な原因です。数式の結果が予期しないものになった場合は、非表示の書式設定や空白セルがないか確認してください。パフォーマンスが重要なシナリオでは、PivotTable や VBA が配列数式に対する強力な代替手段となります。ご自身のスキルレベルとデータセットの複雑さに最も適したソリューションを選択してください。なお、Kutools for Excel にはこれらの作業をさらに効率化できる追加のユーティリティやショートカットが多数含まれています。
最高の Office 業務効率化ツール
| 🤖 | KUTOOLS AI アシスタント:次に基づいてデータ分析を革新します:インテリジェント実行 | コード生成| カスタム数式作成 | データ分析とチャート生成| 拡張機能呼び出し… |
| 人気の機能:検索・ハイライト、または重複をマーキング | 空白行を削除する | データを失うことなく列の結合またはセルを | 数式を使用しない四捨五入... | |
| スーパー LOOKUP:複数条件 VLookup | 複数値 VLookup | 複数シート間 VLookup | ファジーマッチ.... | |
| 高度なドロップダウンリスト:ドロップダウンリストをすばやく作成 | 連動型ドロップダウンリスト | 複数選択可能なドロップダウンリスト.... | |
| 列マネージャー:指定した数の列を追加|列の移動|非表示列の表示状態を切り替え|範囲および列の比較... | |
| 注目の機能:グリッドフォーカス | デザインビュー |強化された数式バー | ワークブックとシートマネージャー | リソースライブラリ(オートテキスト)| 日付ピッカー | ワークシートの統合 | 暗号化/セルの復号化 | リストからメール送信 | スーパーフィルター | 特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線。。。) 。。。 | |
| トップ15 ツールセット:12 テキストツール(テキストの追加、特定の文字を削除、...)| 50+チャートタイプ(ガントチャート、...)| 40+実用的関数(誕生日に基づいて年齢を計算します、...)| 19 挿入ツール(QR コードを挿入、パスから画像を挿入、...)| 12 変換ツール(単語に変換する、為替レートの変換、...)| 7 結合と分割ツール(高度な行のマージ、セルの分割、...)|さらに多数 |
Kutools for Excel でExcel スキルを強化し、これまでにない効率を体験しましょう。Kutools for Excel は、生産性を高め、時間を大幅に節約できる高度な機能を300 以上提供します。最も必要な機能を今すぐ入手するにはこちらをクリック。。。
Office Tab は Office にタブインターフェースをもたらし、作業を大幅に簡単にします
- Word、Excel、PowerPoint でタブを使った編集と閲覧を有効にします。Publisher、Access、Visio、Project でもご利用いただけます。
- 複数のドキュメントを、新しいウィンドウではなく、同じウィンドウ内の新しいタブで開いたり作成したりできます。
- 日々の生産性を50%も向上させ、毎日数百回ものマウスクリックを削減します!
すべてのKutools アドインが、たった1 つのインストーラーで完結。
Kutools for Officeスイートには、Excel ・Word ・Outlook ・PowerPoint 用のアドインと Office Tab Pro が含まれており、複数の Office アプリを横断して作業するチームに最適です。
- オールインワンスイート— Excel、Word、Outlook、PowerPoint 用アドイン+Office Tab Pro
- インストーラー1 つ、ライセンス1 つ— 数分でセットアップ可能(MSI 対応)
- 連携してさらにパワーアップ— Office アプリ全体で生産性が向上
- 30 日間のフル機能トライアル— 登録不要、クレジットカード不要
- 最高のお得感— 個別アドイン購入よりお得