Excel集計でのINDEX・MATCH関数が超便利

データの集計に大活躍のExcel。
関数を知れば知るほど「Excelってすげー！！便利ー！！」となりますよね。

この間、とある集計業務を行っていて感動したので備忘録としてまとめます。

## やりたかったこと

オブジェクティブグループでは[Qiita-Organization](https://qiita.com/organizations/objective_group)に参加しており、各社員ごとのいいね・記事投稿数を毎月集計しており、下記のような表があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/b42ccf2c-d68a-f95d-70cf-c683cf2604b9.png)

この表を基に2023年9月～2024年8月分の年間での社員ごとのいいね・記事投稿数を集計したかった、というのが目的です。

## 最初に試したこと

社員ごとの情報を取得したく、横に欲しい数があるので無難に**VLOOKUP**を使ってみました。
まず年間集計のひな形を作って、社員・月ごとにまとめて**SUM**しようと頭の中で描いていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/39aba925-b640-5db2-e70a-d266d3f875fd.png)

取れてる、取れてる。
いいじゃん、このままやろう～と2024年10月分を取得しようとしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/7483be57-82e6-737a-9daf-20beb0b6be08.png)

…お気づきになられたでしょうか。

2024年9月分：`=VLOOKUP($H4,$C$3:$F$8,3)`
2024年10月分：`=VLOOKUP($H4,$C$9:$F$11,3)`

**検索範囲**を基の表の月に合わせて変えていますね。
実際の集計表はもっといろいろな情報があり、数も多いです。
月ごとに検索範囲をいちいち指定し直さなくてはいけない…

#### めんどくさい、無理だ！！！！！！

## さて、どうしようか

集計作業をしている時に上司と別件で通話しながら作業をしていました。

私「すいません、画面共有していいですか？めんどくさいですよねこれ…なんかいい方法ないですかね…」
上司『あーーーこれはめんどくさいね！**INDEX**と**MATCH**使えば？』

<img width = "200" alt = "kotowaza_mekara_uroko_woman.png" src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/9d5d982d-2743-b0fe-9706-5ddd3fb63fb9.png">

私「あ、聞いたことあるけど使ったことないかもです…ありがとうございます！
　集中してやりたいので通話切ります！ありがとうございました！！！」

 そもそもちゃんと何度か使っていれば、最初から**INDEX**と**MATCH**を使っていたのでやっぱり慣れと存在を知っておくって必要だなと感じました。

**VLOOKUP**で「めんどくさいな～絶対なんかあるだろうもっと便利な方法…」と思ってもパッと浮かばなくて、最終的に同じ方法で集計ができたとしても調べるまでに時間がかかっていたと思います。

なので、有識者の意見って本当にありがたいし、素直にめんどくさいんでなんかないですかねって聞く質問の重要性も大切だなと改めて痛感しました。

## INDEXとMATCHの合わせ技

- INDEX : 行番号と列番号で指定されるテーブルまたは配列の要素の値を返す（[参考](https://support.microsoft.com/ja-jp/office/index-%E9%96%A2%E6%95%B0-a5dcf0dd-996d-40a4-a822-b56b061328bd)）

- MATCH : 範囲 のセルの範囲で指定した項目を検索し、その範囲内の項目の相対的な位置を返す（[参考](https://support.microsoft.com/ja-jp/office/match-%E9%96%A2%E6%95%B0-e8dffd45-c762-47d6-bf89-533f4a37673a)）

上記から、**MATCHでいいね数の位置を探してもらって、INDEXで実際の値を取得しよう**と考えました。

実際の表と式がこちらです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/7ab7c88e-e2c1-de4e-576a-fe510bc879f8.png)

### MATCHでしていること
書式：MATCH(検査値, 検査範囲, [照合の型])
検索値：**年間集計表**の「社員一覧から取得したい社員`H4` ・ 取得したい集計日`I3`」
検索範囲：**月間集計表**の「社員名`C3:C16`・集計日`B3:B16`」
照合の型：完全一致で`0`を指定

### INDEXでしていること
書式：INDEX(配列, 行番号, [列番号])
配列：**月間集計表**全体`B3:F16`
行番号：MACTCHで検索した行番号
列番号：いいね数を取得したいので4列目として`4`を指定

見やすさ重視のために、セルの[絶対参照](https://support.microsoft.com/ja-jp/office/%E7%9B%B8%E5%AF%BE%E5%8F%82%E7%85%A7-%E7%B5%B6%E5%AF%BE%E5%8F%82%E7%85%A7-%E8%A4%87%E5%90%88%E5%8F%82%E7%85%A7%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B-dfec08cd-ae65-4f56-839e-5f0d8d0baca9)などは行わない式で記載しましたが実際はできるセルには行って、年間集計表全体にオートフィルして完了。

#### めちゃくちゃ楽～～～！！！！


話逸れますが、オートフィルのことを口頭で言う時に「それでバーーーっとして」って言ってしまいますのですが同じ方いませんか？

## 仕上げにIFNAの合わせ技とSUMでの集計

オートフィルして気付いたのですが、新入社員で月間集計表に名前がない場合は`#N/A`が返されてしまうんですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/686c87e3-b25c-cc71-c4ec-e6ec1f85e980.png)

単純に月間集計表側にGさんがいないので「いないよ～」とMATCHに判定されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/01b2bcd9-5f37-c027-bcd7-4d3abf21a7cc.png)

逆に新入社員だからか～と一目でわかるのですが、年間集計を**SUM**で取得したいので全てを数値にする必要があります。
なので**IFNA**を使って「`#N/A`の場合は0を設定してね」としました。

- IFNA：IFNA 関数は、数式が #N/A エラー値を返す場合に指定した値を返す。それ以外の場合は、数式の結果を返す。([参考](https://support.microsoft.com/ja-jp/office/ifna-%E9%96%A2%E6%95%B0-6626c961-a569-42fc-a49d-79b4951fd461))

### IFNAでしていること
書式：IFNA(値, value_if_na)
　　　<font color = "grey">※value_if_na：数式が #N/A エラー値に評価された場合に返す値を指定</font>
値：INDEXとMATCHで設定した値
value_if_na：数値としたいので`0`を指定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/c8ea9ea9-24ed-b25a-8470-4091337b11b1.png)

材料は全て揃ったので、月ごとの集計を取りたいので横に**SUM**して終わり。
月間集計表にない月も指定している例で作った表のため`I4:N4`には数値を入力しています。
実際に作ったものは全て上記で説明した関数で数値が設定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2100940/e45697bb-81f8-1e49-8336-7b164776f60a.png)

## おわりに

実際いろいろ調べて試行錯誤しながら作りました。
ただ自分が慣れている・使いこなせる関数だけではなくて、使ったことないな～という関数も積極的に使っていくと今後の役に立ちます。

また関数の存在自体を知らなくては冒頭でも書いた通り調べるにも時間がかかるので、定期的に公式などでExcel関数を読んでおくことも大事だなと。

[MicroSoft公式Excel関数](https://support.microsoft.com/ja-jp/office/excel-%E9%96%A2%E6%95%B0-%E3%82%A2%E3%83%AB%E3%83%95%E3%82%A1%E3%83%99%E3%83%83%E3%83%88%E9%A0%86-b3944572-255d-4efb-bb96-c6d90033e188)をブクマしておくと便利です。

オブジェクティブグループでもExcelについての記事も多いので、参考に読んでいただけると嬉しいです。

[【Excel】XLOOKUPなら左側からも取り出せる](https://qiita.com/suzu_travas/items/6f6b82346d1694246c96)
[データ検証に使えるExcel関数まとめ](https://qiita.com/some_yo/items/98ef4e0926a748160882)
[これからエクセルVBAの勉強を始めたい方へ](https://qiita.com/excel-hishi/items/2a9b65e1202946dcb14b)
[元ニートExcel使えなくてAIに泣きつく。](https://qiita.com/suzu_travas/items/1bb370d0dfea84b8d4f2)
[Excelショートカットキー集〜ラクしようぜ〜](https://qiita.com/Yukidarusan/items/b403fbbfa545babf657f)



また、Xの投稿も平日は毎日行っています！

IT関連の小ネタや便利技から、日常のアニメ・ゲーム布教なども幅広く投稿してるので、ご興味のある方は是非フォロー・いいねをお願いします。

https://x.com/obg_ocr