【エクセル】表から重複しないようにデータを抜き出す方法(関数編)
おはようございます。こんにちは。いたをです。
先日同じタイトルで、表から重複しないデータを抜き出すための方法として、「フィルターオプション」という機能をご紹介しました。
フィルターオプションを使って抜き出したデータは、元の表とリンクしないので、元の表にデータの追加や削除があっても、抜き出したデータには反映されないという特徴があります。しかし、リンクしていないということは自由に操作できるメリットもありますね。
ただし、同じ表を別の部署のデータに対して使用するなどの使い回しが聞きませんので、今回ご紹介する関数を使ってデータを抜き出す手法を知っておくと重宝すると思います。
関数ゴリゴリ使いますよ!
営業成績表から社員名を重複しないように抜き出しますよ
今日のサンプル表は、営業成績の一覧を作成してみました。
この営業成績の一覧表から社員名を重複して抜き出します。
最終的にはSUMIF関数を利用して、社員ごとの売上を集計するようにしてみましょう。
まず作業用の列を作ります
D列を作業用の列として営業成績表の各データ(列)に通し番号を付けていきます。
D3セルに次のような数式を書いてみました。
=IF(COUNTIF($B$3:B3,B3)=1,ROW(A1),"")
早速3つの関数の組み合わせです。
IF関数はお馴染み条件分岐です。
条件式にこのような式を書きました。
COUNTIF($B$3:B3,B3)=1
COUNTIF関数は条件を満たすセルのみをカウントの対象とする関数です。
引数は2つ「範囲」、「検索条件」になります。
今回は、B3セルを起点として、B4セル、B5セル、B6セルと範囲を拡げていった時に名前が重複されていない(カウントが「1」)かをチェックしています。
条件に合っていたら(真の場合)はROW関数を用いて、
ROW(A1)
と表記させています。「ROW(A1)」はA1セルの行番号「1」となりますね。これを下方向にコピー(オートフィル)すると、「ROW(A2)」「ROW(A3)」と引数の行番号が1ずつ増えていきますので、結果として「1,2,3,4」と連番が作成されるわけです。
条件に合っていなかったら(偽の場合)は「””」となっていますので、何も表記しません。すなわち重複している名前データの通し番号は表示されないようになります。
INDEX関数を使って社員名を抜き出します
それでは、F3セルに社員名を抜き出す式を入力していきましょう。
ここではこのような数式を書いてみました。
=INDEX($B$3:$B$10,SMALL($D$3:$D$10,ROW(A1)))
INDEX関数は最近ご紹介していますよね。
INDEX関数は「参照」の中から「行番号」と「列番号」で指定した位置のセル番号を返すやつでした。
SMALL($D$3:$D$10,ROW(A1))
SMALL関数は[配列]の範囲のなかで、小さいほうから数えた[順位]の値を求めます。
「ROW(A1)」の値は「1」ですので、セル範囲D3からD10の中から一番小さいデータを取り出す働きをさせています。
はい!、うまく重複しないように社員名を抜き出すことが出来ました。
でもちょっと待ってください!
5人ちゃんと抜けましたが、「#NUM!」エラー(数値に問題あり!)が出てしまいましたね。
これは気持ち悪い!!!
それではエラーが出ないように式を組み直してみましょう。
重複を除いた社員数を求めます
=COUNT(D3:D10)
D1セルにCOUNT関数を入力して、通し番号が表示されているデータの件数を数えます。すなわち重複を除いた社員数を求めているわけですね。
準備はこれだけ。では先ほどのF3セルに戻って、数式を次のように書き換えてみましょう。
=IF(ROW(A1)<=$D$1,
INDEX($B$3:$B$10,SMALL($D$3:$D$10,ROW(A1)))
,"")
長くなってしまいましたが、
要するに多くコピーしてもデータの件数以上は、エラーではなく非表示になるようにIF関数で場合分けしたわけです。
社員ごとの売り上げを集計するよ
社員名を重複なく抜き出すことが出来たら、あとは売上を集計することも簡単ですね。社員名を条件としてSUMIF関数で売上金額の合計値を求めます。
=SUMIF($B$3:$B$10,F3,$C$3:$C$10)
今回は売上の集計をしましたが、重複を除いて取り出した社員名のデータは、入力規則リストの元データとして使用することも出来ますよ。
まとめ
今日は関数を使用して、表から重複が無いようにデータを抜き出す方法をご紹介しました。
作業用の列に通し番号を振りましたが、作業が終わったら列を非表示にすれば何事もなかったように出来ますよ(笑)。
IF関数、COUNTIF関数、ROW関数、COUNT関数、INDEX関数、SMALL関数と今回は6種類の関数を駆使しました。
お疲れ様でした~。
***