【Excel】空白と重複を除いた件数を条件付きでカウントする【Excel 2021】

## 概要
Excel 2021から使用可能になった`UNIQUE`と`FILTER`関数に、`COUNTA`関数を組み合わせ、空白と重複を除いた件数を条件付きでカウントする数式を紹介します。

例として、以下のExcelではF列に都道府県が空白と重複込みで入力されています。
ここから、空白と重複を除き、かつ、「一番右の文字が"県"」の条件に一致するデータの件数をカウントする数式を作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/cf7fc942-3e8c-42df-8a3c-d5a7071c80ea.png)

### 数式
#### 条件付き
>=COUNTA(UNIQUE(FILTER(<font color="Blue">F3:F17</font>, (<font color="Blue">F3:F17</font><>"" )*<font color="Red"> (RIGHT(F3:F17,1)="県")</font>)))

上記の画像にて、黄色いセル（D3セル）に入力されている数式がこちらです。
<font color="Blue">青色</font>の部分がカウントする範囲です。2か所ありますが同じ範囲を指定してください。

赤色の部分`(RIGHT(F3:F17,1)="県")`がカウント条件です。ここではカウントする範囲と同じ範囲を指定し、「一番右の文字が"県"」という条件を表す数式を入れています。
条件は必要に応じて変更してください。例えば、3文字の都道府県を集計したければ`(LEN(F3:F17)=3)`に変える等です。

#### 条件は別の列を指定してもOK
行の範囲が一致していれば、条件は別の列を指定しても構いません。
以下の例では、「G列（得点）の値が50より大きい」という条件に絞り込んだ上で、F列の件数を空白と重複を除いてカウントしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/5e8aa156-09db-4e74-8ba8-0d6573a5cf80.png)

>=COUNTA(UNIQUE(FILTER(<font color="Blue">F3:F17</font>, (<font color="Blue">F3:F17</font><>"" )*<font color="Red">(G3:G17>50)</font>)))

#### 条件無し
>=COUNTA(UNIQUE(FILTER(<font color="Blue">F3:F17</font>, (<font color="Blue">F3:F17</font><>"" ))))

条件が必要なく、単に空白と重複を除いた件数をカウントしたい場合はこちらの数式になります。

#### 複数条件
>=COUNTA(UNIQUE(FILTER(<font color="Blue">F3:F17</font>, (<font color="Blue">F3:F17</font><>"" )*<font color="Red">(RIGHT(F3:F17,1)="県")</font>*<font color="Red">(LEN(F3:F17)=3)</font>)))

複数の条件を付けたい場合は、`*`と`条件式`を横に追加していきます。

## 解説
「数式の検証」を使って流れを追ってみましょう。
わかりやすいよう、F3～F8の範囲までデータを減らしています。
数式の条件は同じで、空白と重複を除き、かつ、「一番右の文字が"県"」の条件に一致するデータの件数をカウントします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/aa0c123d-f507-4757-a3f0-51435c9b9114.png)

###### Step 1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/fa673b8b-83bd-4154-ae5d-42a7c38946e4.png)

数式の検証を開始しました。計算の途中結果を表形式で書いていきます。

|データ|
|---|
|東京都|
|千葉県|
|（空白）|
|千葉県|
|神奈川県|
|東京都|

###### Step 2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/10d5361a-aabe-4f24-89e5-80c0bd55277b.png)

まず`F3:F8<>""`の部分が計算されました。各行には空白でなければTrue、空白ならFalseが入ります。

|データ|空白ではない|
|---|---|
|東京都|True|
|千葉県|True|
|（空白）|False|
|千葉県|True|
|神奈川県|True|
|東京都|True|

###### Step 3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/466771f1-60d8-483f-9051-ec440ff54624.png)
次に、`RIGHT(F3:F17,1)`が計算されました。各行には右端から数えて一つ目の文字（右端の文字）が入ります。

|データ|空白ではない|右端の文字|
|---|---|---|
|東京都|True|"都"|
|千葉県|True|"県"|
|（空白）|False|""|
|千葉県|True|"県"|
|神奈川県|True|"県"|
|東京都|True|"都"|

###### Step 4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/014a93c7-f77f-4d27-b4bf-b9da4d1f11bc.png)
続いて、先ほど算出した`RIGHT(F3:F8,1)`の結果が`"県"`と一致するかどうかが計算されました。各行には右端の文字が"県"ならTrue、そうでなければFalseが入ります。

|データ|空白ではない|右端の文字 = "県"|
|---|---|---|
|東京都|True|False|
|千葉県|True|True|
|（空白）|False|False|
|千葉県|True|True|
|神奈川県|True|True|
|東京都|True|False|

###### Step 5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/4e911d2c-ca88-47e5-b467-efcecaa36532.png)
`<>""`の結果と、`RIGHTの結果 = "県"`の結果を乗算します。

###### Step 6
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/2619cebb-eb57-490f-bcf2-c25d728895ed.png)
`<>""`の結果と、`RIGHTの結果 = "県"`の結果を乗算した結果が表示されました。`True`は`1`、`False`は`0`として扱われますので`True` * `True`が`1`、それ以外の組み合わせの計算結果は`0`になります。つまり、両方の条件を満たす行のみが`1`と表示されます。

|データ|空白ではない|右端の文字 = "県"|両方の条件を満たす|
|---|---|---|---|
|東京都|True|False|0 (False)|
|千葉県|True|True|1 (True)|
|（空白）|False|False|0 (False)|
|千葉県|True|True|1 (True)|
|神奈川県|True|True|1 (True)|
|東京都|True|False|0 (False)|

###### Step 7
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/7d9d9daa-3117-4b72-b916-a427b18df21a.png)
ここからは関数が順次実行されます。まず`FILTER`関数が実行され、先ほどの計算結果で`1`となった行のみに絞られました。

|データ|空白ではない|右端の文字 = "県"|両方の条件を満たす|
|---|---|---|---|
|千葉県|True|True|1 (True)|
|千葉県|True|True|1 (True)|
|神奈川県|True|True|1 (True)|

###### Step 8
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/c0c2c4e7-2e52-4862-b9fe-8712ff2b45dd.png)
次に`UNIQUE`関数が実行され、重複した行が除かれました。

|データ|空白ではない|右端の文字 = "県"|両方の条件を満たす|
|---|---|---|---|
|千葉県|True|True|1 (True)|
|神奈川県|True|True|1 (True)|

###### Step 9
最後に、`COUNTA`関数が実行され、残った行の件数が計算されます。これにて、『空白と重複を除き、かつ、「一番右の文字が"県"」の条件に一致するデータの件数』を無事にカウントできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/deb20894-6ebc-463e-af33-e3490b9478a7.png)

## 動作環境
- Microsoft Excel 2024

## 参考

こちらの記事は以下の`【Excel】空白と重複を除いた件数を条件付きでカウントする【Excel 2013】`という記事をリニューアルしたものです。もしExcel 2021以前のバージョンの話をお調べの場合は、以下の記事をご参照ください。

https://qiita.com/Davoi/items/d18cd89f193db2f5d04d