其ノ10 データ重複と並べ替え 後編
ハイ毎度。
今回は、前回との関連で。
前回、重複のあるデータの取り扱いについてやりました。
本日の課題は、重複してるデータについて、差異のある箇所を割り出す、というものです。
ダブってる2件目、3件目のレコードを削除して1件にする、というところまではやりません。
むしろ、「どのレコードを活かし、どのレコードを削除するか」を判断する材料をつくる、というイメージです。
さてはて、どうなりますかな。
差異のあるセルを割り出す:並べ替え
では、本日の練習データ、ダウンロードお願いします。
開くとこんな↓です※1。
本日の課題は、「注文番号がダブってたら、商品名、および価格を比較して、もし差異があったらその箇所がわかるようにしてほしい」というものです。
「差異のある箇所がわかるようにしてほしい」のですから、差異のあるところにしるしをつければよさそうなんですが…、じゃあ、どうやって差異のある箇所を割り出しましょうかね、ってのが課題です。
みなさんも、ちょっとやり方、考えてみてください。
・
・
…まず、そもそも重複が存在するかを調べてみましょうか。
ダブリがないなら、そもそも何の問題もないですもんね。
というわけで、前回も使ったcountif関数を使って、重複があるかどうか調べてみましょう※2 ※3。
A列(注文番号列)全体を範囲として、A2セル(注文番号1コ)を検索するんですよ。
重複ありますね…。
ま、そうなるように練習問題作ってるんですけど(笑)。
あ、そうそう、式を入れたところ、忘れずに値貼りしておいてくださいね。
列全体をコピーして、同じ場所に、右クリックで「形式を選択して貼り付け」→「値」でしたね。
関数入れたら値貼り、ですよ※4。
さて、課題は「ダブってるところの差異を知りたい」でした。
だから、重複数「1」のところはどうでもいいんですよ。
ダブってないのですから。
問題は、重複数が「2」と「3」のところですよね※5。
調査しなければならないのは。
なので、重複してるレコードがタテに隣り合わせになるように、並べ替えをしておきましょうか。
というわけで、まず、並べ替えをする前に、「No」列を作成しておきましょう※6。
もし「元の順番に戻して」と言われても、対応できるように、ね。
「No」入れました。
では、並べ替えましょうか。
まず、並べ替え画面にして、最優先するキーを…って、おおっと!
範囲選択は大丈夫ですよね?
例によってこのExcelも1列空いてますので、範囲指定をきっちり、一番右の「入力日」まで含めてお願いします。
で、範囲をきっちり選択したところで、並べ替え時の最優先するキーを今回は「重複」(さきほどcountifを入れたところ)にします。
昇順ね。
そして、「重複」昇順のなかで、さらに「注文番号」順に並べたいので、並び替えレベルを追加し、「注文番号」昇順を指定してください※7。
こんなふうに並べ替えられます※8。
こうすると、重複数「1」/「2」/「3」で大きくまとまり、その中でダブった注文番号が上下隣り合わせになります。
この状態だと、重複数「1」のところはガサっと無視して良いですし、また、ダブリのあるところも、ダブってるレコードが上下隣り合わせになってますから、もし差異のある箇所を目で探しにいくとしても、見つけやすくなってますよね。
ちょっと、上からデータを眺めてみていってください。
・
・
では、「商品名」と「価格」の差異の割り出し、どうやりましょうか。
「よし!目で探そう!」
………繰り返しますが、私は根性のある人が大好きです。
それに、これぐらいの件数なら目で探してもそんなに時間はかからないでしょう。
でも、どうしても人間の目だと、微妙な文字の違いや数字の違いを見落とすかもしれません。
「3」と「8」って結構見間違えるんですよ。これホント。
なので、機械的に割り出したいところです。
差異のある箇所にフラグを立てる
では、どうしましょうか。
差異を割り出すのだから、其ノ2でも使ったイコール式を使いましょう。
まず、商品名を比較するための列を挿入します。
項目名は「←差異」でいいかな※9。
ではここに、イコール式を入れていきましょう。
前回は1コ上のセルと比較しました。
「TRUE」のところが、ダブった注文番号の2コ目以降、というフラグ(しるし)でしたね。
今回はですね…、こんなふうに↓しましょう※10。
まず、重複数「1」のところはガッサー!と無視します。
比較の必要がないですもんね。
んで、「商品名」を比較するんでしたね。
で、イコール式を入れたわけなんですが、今回は、1コ下のセルと比較します。
重複数「2」は146行目からはじまっているので、=(E146=E147)と、「その行のセルと1コ下のセルがイコールかどうか」を調べるようにします。
そうすると、もし差異があれば「False」が返るはずですよね※11。
「じゃあ、この式をコピっておしりまで入れれば!」
…って、いつもだったらなりそうなものなんだけど、実はそうはいきません。
というのも、今現状並び替えた状態だと、重複してる商品レコードはこういう↓かたまりになっているんだけど…※12。
重複してる2レコード目にこの式を入れても、それは違う注文番号の商品名と比較しちゃうことになるから、意味がないんですよ※13。
ちがう商品の商品名と比較しても、ほぼ確実にFalseになるので、ここに式を入れてもムダですよね。 なので、1コ飛ばしに式を入れられればよいのですが…。
1コ飛ばしに式を入れる
いやいや!
1コ飛ばしに式をいれること、できますよ!
やり方はですね…、まず、さきほど「イコール下」の式を入れたセルの下のセル、すなわち重複してる2コ目のセルは空白のままにしておいてください。
そして、上下2セルとも選択します※14。
上は式の入ったセル、下は空白ですよ。
選択したら、選択範囲の右下のあたりにマウスを持って行ってください。
ポインタが十字型になるはずです。
そうしたら、下方向にドラッグします。
下セルが空白のままです※15。
重複数「2」のゾーンのおしりまで引っ張ってください。※16
できました?
下セルと比較する式
空白
下セルと比較する式
空白
・
・
・
と、式と空白セルが交互に並ぶと思います。
Falseが出てるところ、たしかに商品名ちがいますね。
あ、今はアキアキですが、このアキのところは、後々処理しますよ。
続いて重複数「3」のゾーンです。
ここは、比較対象が3つあります。
わかりやすくするために、上からA・B・Cとしましょう※17。
もしここで、AもBもCもイコールなら、問題ないんですよ。
だから、AとBとCがイコールかどうかを調べたい。
でも、=(A=B=C)という式では、ダメなんです。
機能しないんです(ちゃんとした理由はよくわからないですけど…おそらく同時に2つのイコールを処理できないのではないかと思います)。
A・B・C、3つともイコールかを調べるには、ひと工夫して、
A=B かつ A=C
という式の入れ方をしてあげる必要があります。
なので、この「かつ」の部分、and関数をつかって、
=and(A=B , A=C)
としてあげればOKです。
実際に式を入れてみましょう※18。
この式を入れると、A・B・C、3つともイコールなら「TRUE」、1コでも違うのがあれば「FALSE」になります。 結果はどうなったでしょうか?※19
Falseでした。 差異があるみたいですね。 あ、よおく見ると、1コ目・3コ目は「タテ788~」なのに、2コ目は「タテ789~」だ…。
とりあえず、残り2つのセルは空白のままにしておいてくださいね。 次の工程で処理しますよ。
<この機会にちょっとお話>
今回は、重複数「3」のゾーンが1かたまりしかありませんでした。
では、もし「3」のゾーンがずらーっとあったらどうしましょうか。
…実は、「2」のときと同じです。
下の空白セル2セルを含めてまとめて選択して、下に引っ張ればOKです。
そうすれば、
and式
空白
空白
and式
空白
空白
・
・
・
となりますよ。
では、式を入力したので、値貼りしておきましょう。 列全体を選択して、「形式を選択して貼り付け」→「値」ですよ※20。
さて、準備は整いました。
上セルと同じ値を入れる:ジャンプ
さて、式を入れ終えました。
現状、重複してる上側のセルだけに判別の式の結果が入っています。
この状態で、FALSEのところを目で探していって、例えばそこに色を塗っていっても良いんですが、せっかくだからもうひと手間加えたいと思います。
差異のあるところだけ、フィルタで抽出できると良いな、と思いまして。
そのために、ジャンプという機能を使います。
案ずるより産むが易し。
やってみましょう。
まず、F列(「←差異」列)を選択します※21。
範囲選択しました?
ジャンプは、必ず範囲選択してから行ってくださいね。
次に、ctrlキーを押しながらGを押してください。
ctrl+Gです。
すると、「ジャンプ」というウインドウがでます。
その中の、「セル選択」を選んでください※21。
すると、「選択オプション」というウインドウが出ます。 そこで、「空白セル」を選択※23して、OK※24。
こうすると、指定範囲内の空白セルを全部選べるんですよ。
…「だから何?」って顔、しないでください。
えーと、何がしたいかっていうと、現状、ダブリの上側にTRUE/FALSEが入っているじゃないですか。
もし、ダブリの下側(現状blanc)のところにも上セルと同じ結果(TRUE/FALSE)を入れることができれば、フィルタでFALSEだけを抽出できる=差異あるところだけピックアップできる、と考えまして…。
あ、ジャンプの前の範囲選択、忘れないでくださいね。
範囲選択しないと、シート内の全部の空白セルが選ばれちゃいますから。
さて、続きです。
ジャンプができましたら、イコール上とする式を入れてください※25。
「=」入れて、1コ上のセルを選択、ですよ。
あ!
まだenterは押さないでくださいね。
式を入れたら、ctrlキーを押しながらenter!
ctrl+enterです。
すると、ジャンプで選んだセル、すなわちF列の空白セルすべてに、イコール上の式が入ります※26 ※27。
空白セルが埋まりましたね。式を入れたので、もう一度値貼りしておいてください※28。
…重複数「1」のゾーンに「←差異」と入ってしまったのはご愛嬌。
ですが、こうすると、「FALSE」のところ=差異のあるアイテム、ってことになるんですよ。
ジャンプ前までは、ダブってる1コ目だけに判別の値(TRUE/FALSE)が入っていました。
ダブりの2コ目以降は空白でした。
だけど、ジャンプしてイコール上を入力することで、1コ目と同じ判別の値(TRUE/FALSE)が入る。
そうすれば、フィルタで「FALSE」を抽出でき、ダブリで差異のあるアイテムだけ見ることができます。
…なんだかことばで説明するとむずかしそうに見えちゃいますね。
ただ、こういうロジックを組み立てるのって、経験が物を言うところがあります。
そして、今、経験、したじゃないですか。
僕のこのサイトって、経験してもらうためにあるんですよ。
手を動かして、失敗して。練習なんだからいくらでも失敗できます。
そうやって、経験値を積んでもらって、Excel力をつけてもらえたら良いな、と思っています。
なので、チャレンジしてみてください。
さて、話は戻りまして。
もうひと工夫しようかな、と。
まず、フィルタをかけて、「←差異」のところ、消しましょうか※29 ※30 ※31。
同様に、「True」のところもフィルタで抽出して、消しちゃいましょう※32。
さて、残りは「FALSE」です※33。
さて、現状「FALSE」のところ=差異のあるアイテムなんですが、「FALSE」ってあんまり一般的なことばではないですね。
Excelに不慣れな上司には伝わらないかもしれません。
なので、「FALSE」を「×」とかわかりやすい表現に変えましょうか。
フィルタで抽出して「FALSE」→「×」に変えましょう※34~※38。
ということで、差異のあるところだけフラグ(しるし)を立てることができました※39。
価格についても同じようにしてください※40~※43。
ハイ、できました。
フラグの立った箇所について、どこがどう違うのか、確認しておいてください。
ちなみに、XH4165の商品名「レポートパッド B5 A罫 7㎜ 28行」ですが、
一見すると商品名同じみたいなのに、「×」になっています。
でもこれは、僕たちの計算が間違ったわけではないんです。
どちらか一方の商品名のおしりに、余計なアキスペースが入っていませんか?
セルの中に入って確かめてみてください。
イコール式は、そういうところまで検出してくれるんです。
と、いうことで、本日の課題は終わり!
本日の課題はちょっと、むずかしかったかもしれません。
練習は何度でもできるし、いくら失敗してもよいので、稽古不足を幕は待たない/恋はいつでも初舞台にならないよう、やってみてください。
あ!
あと、ジャンプで空白選択→イコール上、のコンボは、覚えておくといろいろな場面で使えます(ピボットテーブルで抽出したデータを穴アキ箇所を埋める、とか)。
なので、覚えておくとよいですよ。
では、シーユーアゲン!