データ管理を行っていると、似たようなデータが多い場合、そのデータが重複したものかどうか確認するのが非常に大変です。
何か良い方法はないですかね?
重複していないことがわかるようにするには、それぞれのデータに「一意のコード」をつくると良いですよ!
IF関数やTEXT関数をうまく組みわせて、自動的にコード作成することがおすすめです。
それでは、詳しく解説していきますね!
はじめに
本題に入る前に、この記事がおすすめな人を挙げてみます。
- 集計や分析を行なう機会が多い人
- エクセルを扱う機会がある人
- 事務職を目指している人
ちなみに、最低限「IF関数の基礎」を把握している想定での記事となります。
※自信がない方はこちらの記事で学んでください。
→【エクセル初心者向け】データの条件分岐を自動化してストレスフリー!IF関数の使い方
データ管理するならデータごとに一意のコードは必須!
エクセルに限らずデータを管理する上で必須なのは「一意のコード」です。
ちなみに、「一意」とは、辞書で調べると次のような意味合いだとわかります。
意味や値が一つに確定していること。
これだけだと、ちょっとわかりにくいので具体的な事例で見て行きましょう。
たとえば、社員情報がまとまった名簿があるとします。
この表では「氏名」と「契約形態」しかないですが、可能性として社員の中で同一名義かつ同じ契約形態の社員が複数人いるという場合があります。
実際の社員情報は他にも住所や生年月日なども管理しているため、他の情報と照らし合わせて一意なものかどうかを判断することは可能だと思いますが、それだとかなり手間がかかってしまいますね。
よって、「このデータは、この表の中で重複していないデータ」だということが識別しやすいようにしておくと、ぐっと管理しやすくなりますよ。
ちなみに、「一意のコード」は職場によって「ユニークキー」などと呼ばれることもあります。
こういったコードがきちんとある表は、他の表へ何かしらのデータを転記したい場合に、VLOOKUP関数などの行列関数を活用するための下地にもなるのも、非常に重要なポイントですね。
【エクセル初心者向け】データ転記の作業時間を9割カット!VLOOKUP関数の使い方 | Excelを制する者は人生を制す ~No Excel No Life~
目次1 はじめに2 VLOOKUP関数とは3 VLOOKUP関数が活躍するのは主にデータの転記作業!4 VLO・・・
IF関数とTEXT関数とCOUNTIF関数を使って一意のコードを自動生成する!
それでは、実際に一意のコードをつくる方法について、先ほどの社員名簿のサンプルをもとに解説していきます。
まず、前提として基本的にはワークシート上にあるデータをもとに、IF関数・TEXT関数・COUNTIF関数を組み合わせて自動的に一意のコードを作成します。
なお、コード体系のルールについては、以下のとおりです。
- 「契約形態」が正社員ならコードの頭文字が”S”、時給制なら”J”
- 1の後は、名簿の上から正社員・時給制それぞれの通し番号(表の中で何番目のデータか)
実際、一意のコードは純粋な数字だけの通し番号でも良いのですが、ぱっと見でデータの種類がわかるようなルールにしておくと、管理しやすいのでおすすめです。
なお、今回は3つの関数を使っていきますが、1の条件分岐の部分はIF関数、2の通し番号の部分はTEXT関数とCOUNTIF関数を活用しますよ。
TEXT関数とCOUNTIF関数の概要と単体での使い方は次の記事をご参照ください。
【エクセル中級者向け】IF関数の意外な使い方②【定型文を自動生成する】 | Excelを制する者は人生を制す ~No Excel No Life~
目次1 はじめに2 定型文の手入力は間違えるリスクがある3 IF関数とTEXT関数を使って定型文を自動生成する・・・
COUNTIF関数で通し番号を取得する方法
それでは、3つの関数の組み合わせの前に、COUNTIF関数で通し番号を取得する方法は、絶対参照・相対参照をしっかり理解しておかないとわかりにくいため、個別に解説しておきます。
「COUNTIF($C$2:$C2,$C2)」のように、引数「範囲」の起点となるセルは行列ともに絶対参照、終点となるセルは行を相対参照(列は絶対・相対のどちらでも可)にすればOKです。
これで、各「雇用形態」がそれぞれ上から何番目のものかがわかりますね。
なお、COUNTIF関数の参照形式を工夫したのは、A2セル以降へ数式をコピペした際に、COUNTIF関数の引数「範囲」が下へ行くほど広がるようにしないと通し番号にならないためです。
これが、すべての数式でCOUNTIF関数の「範囲」をA列すべてにしていると、同じ「雇用形態」の場合は当然ですがCOUNTIF関数の結果が同じになってしまいますからね。(「雇用形態」が”正社員”のデータのすべてのセルで同じ”2”が返る)
ちなみに、「範囲」が広がるイメージがわかない人は以下を見てくださいね。
IF関数・TEXT関数・COUNTIF関数を組み合わせる!
実際に、3つの関数を組み合わせた数式は以下のとおりです。
まず、コード体系のルール「1.「契約形態」が正社員ならコードの頭文字が”S”、時給制なら”J”」の部分は、「IF($C2=”正社員”,”S”,IF($C2=”時給制”,”J”,””))」のとおりオーソドックスなIF関数ですね。
次に、コード体系のルール「2.1の後は、名簿の上から正社員・時給制それぞれの通し番号(表の中で何番目のデータか)」の部分は、「TEXT(COUNTIF($C$2:$C2,$C2),”00000″)」のようにTEXT関数の中にCOUNTIF関数を入れてあげます。
意味合いとしては、COUNTIF関数で取得した「雇用形態」ごとの通し番号を5桁の数字にするために、TEXT関数によって”00000”という表示形式にしているわけですね。
よって、A2セルでいえば、この表の中で”正社員”のデータが1番目なので”00001”と表示されているのです。
最後に、先ほどのIF関数とTEXT関数+COUNTIF関数を”&”[アンパサンド]でつなげてあげればOKです。
サンプルファイルで練習しよう!
では、今回のテクニックを使ってみましょう!
サンプルの条件
今回の題材は次のとおりです。
「氏名」と「雇用形態」が記載された社員名簿があります。
上記で解説したとおり、コード体系のルールに則って「社員番号」を自動で作成できるように数式を組んでみましょう。
- 「契約形態」が正社員ならコードの頭文字が”S”、時給制なら”J”
- 1の後は、名簿の上から正社員・時給制それぞれの通し番号(表の中で何番目のデータか)
実際に練習してみよう!
可能であれば、以下のサンプルファイルをダウンロードして実際に操作してみてください。
サンプルファイル_IF関数_一意コード生成
※サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります。
(上記リンクから登録フォームへ遷移します)
ファイルを開いたら次の手順を実施してください。
- 「社員名簿」シートを選択
- A2セルへ「=IF($C2=”正社員”,”S”,IF($C2=”時給制”,”J”,””))&TEXT(COUNTIF($C$2:$C2,$C2),”00000″)」を入力
※赤字の部分をコピーして貼り付けてください。 - A2セルをコピー
- A3~A6セルへ貼り付け(ペースト)
A2セル~A6セルの各セルの数式が以下のとおりであればOKです!
B・C列の各値を変えてみて、A2セル~A6セルの値がどう変わるかも試してみてくださいね。
もし、表や数式を加工してしまった場合は、上記手順を実施済みの「社員名簿 (関数あり)」シートもサンプルファイル内に用意していますので、必要に応じてご活用くださいね。
さいごに
この一意のコードは、なるべくシンプルなルールであり、かつ関係者がデータの意味合いをぱっと見で理解しやすいものがおすすめですね。
よって、コード体系はしっかりと関係者と調整した上で、実際に今回のようなテクニックで自動作成すると良いですよ。
他にも、IF関数を便利に使うための応用テクニックを私の書籍で紹介しているので、こちらもご参考にしていただければと思います。
▼IF関数を基本から応用まで体系的に学びたい方向け
▼IF関数の応用テクニックに加えて、その他VLOOKUP関数なども学びたい方向け
ご参考になれば幸いですm(_ _)m
意外と世の中には一意のコードが溢れていますよ。
特にわかりやすいのは家電製品などの製品番号もその一種です。
製品番号で大体の製造年数やその年の何番目の商品なのかなど、番号だけで知りうる情報が意外と多かったりするので参考になりますね。
メルマガ読ませて頂いています。ありがとうございます。
今回の「一意のコード」は、タイトルから中身がわかりにくかったです。
コード?
コードを作りたいのではなく、重複データの防止をするにはということが、最初の吹き出しで理解しました。
すぎやまさん
メルマガ購読ありがとうございます!
また、タイトルへのご指摘も感謝します。
確かにわかりにくかったので、タイトルを変更してみました。
今後ともよろしくお願いしますm(_ _)m