其ノ19 変わったところはどこ? 後編
ハイ、前回のつづきです。
前回は、2つのExcelデータの差分を割り出す、ということをやりました。
その際、条件付き書式を使ったんでしたね。
今回は、その応用編です。
例によって、ダウンロードをお願いします。
開くとこんな↓※1 ※2になってて、例によってシートが2つあるんですが。
前回は「並び順が同じ」でしたが、今回は「並び順がちがう場合」です。
では、やっつけていきますか。
並び順がちがう→並べ替えてやればよい
タイトルで回答を書いてしまいましたが(笑)、並び順がちがうんだったら同じ並びに並べ替えてやればよいんですよ。
いきなり答えを書いてしまって申し訳ない。
学生のころ、数学の問題がわからなくてつい答えを見ちゃうんだけど、答えを見ても「なぜ1行目がこうなるのかわからない」ってこと、頻繁にあったのですが、…でもね、結局アレって、「経験値がないから」なんですよ。
経験していけば、理屈は勝手についてくる。
なので、わからなかった方、安心してください。
経験値を積んでいけば、おのずと着想できるようになります。
…ということで、ついてきてくださいね。
なので、両シートとも並べ替えてやりましょう。
まず、「最新データ」シートの方。
でね、並べ替えの前に準備として、「no」列を新しく作って連番を振っておきます※3。
こうしておけば、並べ替えた後になってもし「元の順番に戻したい!」ってなっても、戻すことができます。
なので。
では、注文番号:昇順で並べ替えてやりましょう※4 ※5 ※6。
ハイ、注文番号順に並び変わりました。
では続いて、次のシート「3日前のデータ」の方も同様に ※8 ※9。
こっちの「3日前のデータ」の方は並べ替えを実施しても特に並び変わった様子はないのですが…、元々注文番号順だったようですね。
まあ、それならそれで問題ありません。
大事なのは「同じルールで並び替える」こと。
そうすれば、両シートとも同じ並び順になりますので。
ということで、これで準備は終了です。
あとは前回同様、隣にもってきて、条件付き書式で比較してやる※10。
で、条件付き書式を設定してやるんだけど、「no」のところはこちらで勝手に入力したものだし違ってて当たり前なので、条件付き書式の範囲に含めなくていいです。 「注文番号」からの範囲を比較してやりましょう※11 ※12。
式は相対参照にすることを忘れないようにしましょう。
さて、条件式を入れました。
…でね、下にずーっと見ていくと、途中ごそっと白いところがあるんですよ※13。
…ここでちょいと分析してやんなきゃいけないんだけど、…この場合、「3日前のデータ」の「A56068」のレコードがいらないんですよ※14。
つまり、3日前→最新のあいだで削除されたレコード、ってことなんだけど、とりあえずこういうデータ比較の際にはよけいなデータです。
なので、「A56068」は一旦別シートに逃がして、削除してやりましょう。
まず、新しいシートを作り、そこにA56068をコピーして、逃がしてやります※15 ※16。
で、後はよけいなレコードを削除してやればよい※17 ※18 ※19。
これであらためて、同じ注文番号のレコードを横並びにすることができました。
今回のように、不要なレコードだからといって後先考えずに即削除したりせず、一旦別シートに逃がすというのは、大事な考え方です。
こうしておけば、後で見たときに「ああ、A56068は最新データでは削除されたんだな」ということもわかりますし。
ハイ、では、1行削除して条件付き書式もズレてしまったので、もう一度条件付き書式を入れ直してください。
お手数ですが※20 ※21。
で、見ていくと、やっぱりズレてるところがまだあって※22。
今度は「3日前のデータ」の方に1レコード分挿入して、横を揃えてやりましょう。
この作業、前回もやりましたね※23 ※24 ※25。
ハイ、それでは大変お手数ですが、再度条件付き書式を入れ直してください。
ちなみに、行数の調節はあと1か所出てきますので、あしからず※26。
・
・
…できました?
こうやって調節しながらやっていくと、最後にはおしりまできれいに揃って、こんな感じになります※27 ※28。
けっこう大変でしたね。
特に、削除したり、挿入したり、ちまちま調節するのが。
でも、この作業が「件数が異なるデータを比較する」ときの基本となりますので、覚えておいていただければ。
並び順もちがうし、件数も大きくちがう
ではでは、もう1コやってみましょう。 下記のデータ↓をダウンロード願います。
開くとこんな↓です※29 ※30。
コイツらも、例によって差分を出してやりたい。
ということで、やってみてください。
fight!!
・
・
…と、いきたいところなのですが、今回のデータ、ちまちま調節していくの、結構大変なんですよ。
だって、横に並べてみたら、結構件数ちがうし※31。
もちろん、ちまちま調整していけばいつかはきれいに揃うんですよ。
でも、結構手間…。
なので今回は、ちょっと違ったやり方でいきましょう。
vlookupで一気に横にもってきちゃうことにします。
ということでまず、3日前のデータからヘッダー(見出し)だけコピってください※32。
これからここに、vlookupでデータをもってきますので。
今回は「no」列も作りませんし、並べ替えもしません。
なぜなら、注文番号をキーにvlookupでデータを引っ張ってきちゃうからです。
なので、並べ替えなくてもvlookupが検索してくれるから、大丈夫。
あ、そうそう忘れてた。
これからvlookupを使うので、その準備として書式統一をやっておきましょう。
書式統一、其ノ13でやった、テキストファイルにコピって戻して文字列にする例のアレです。
覚えてます?
思い出しがてら、ちょっとやってみましょう※33~37。
思い出しました?
じゃあ、「3日前のデータ」の方も同様に※38。
この一連の作業、vlookupやるときのクセにしておいてほしいんですよ。
実は今回、緑の三角付きになるものは1コもありません(今回の「注文番号」が記号/数字混じりだからです)。
だから、結果的にはムダな工程になってしまうのですが、しかしもし書式が揃っていなくて後になって「やっておけばよかった!」ってなるのはそれこそ大いなるムダです。
なので、準備にひと手間かける、というのは悪くない心がけです。
脱線しました。
ということで、いよいよvlookupを入れていきます。
vlookupの式って、
=vlookup(検索値 , 検索範囲 , 欲しいのは左から何番目? , FALSE)
でしたね。
ということで、式を入れていきましょう。
1コ目の引数はこう↓※39なります。
この式は、後でコピーしたいので、列番号だけ絶対参照にしますよ。
だから$A2ね、$A2。
指定範囲はもちろん「3日前のデータ」の方ですよね。 こちらも絶対参照※40で指定します。
次は「左から何番目?」の指定。
ココで本日は、column関数を使います。
column関数の「column」とは「列」のことで、参照セルの列番号を表示する関数なんです。
かたちは、
=column(参照セル)
というもの。
例えば、参照セルに「A1」を指定すると、「A」列って(左から)「1」番目の列だから、=column(A1)の値は「1」になります。
=column(B1)だと「2」です。
そしてこの式、行方向はどこまで行っても無視されるので、例えばC列99行目のセルを指定し=column(C99)としても、返る値は「3」になります。
其ノ12でvlookup式をコピーしたとき、「欲しいのは左から何番目?のところは動いてくれると楽なのにな~」と思いましたよね?
この部分を、column関数を使って実現しよう、というワケです。
ではさっそく。 vlookupのなかにcolumn関数を埋め込みます。 こんな感じで↓※41 ※42。
こうすれば、この式を横方向にコピーしたときに、1,2,3,…とずれていってくれます。
あ、そうそう、ここは絶対参照にしちゃダメですよ!
ずれることに意味があるのですから。
あとはいつもの決まり文句「FALSE」で、いっちょうあがり!※43です。
なので、式の最終形は
=VLOOKUP($A2,'3日前のデータ'!$A:$E,COLUMN('3日前のデータ'!A1),FALSE)
となります。
試しに、今入れた式を横方向にコピーしてみましょう※44。
うまい具合に機能している、ような感じですね。
これね、何でかって言うと、ちょっと試しに下の実験画面を見てください。
column関数を入れ、A1セルを参照させたものです※45。
A1を参照してるので、A1セルの列番号「1」が返ります。
では、この式をとなりにコピってみます。
となりにコピると、B1が参照されるので、結果「2」が返ります※46。
もっと横方向にコピると、3,4,5,…と増えていきます※47。
つまり、これを応用して、vlookupの「左から何番目?」の部分を動かしていく、というワケです。
ということで、columnの解説は終わり。
ではでは、さきほど入れたvlookup式を、おしりまでコピーしていきましょう※48 ※49。
式をおしりまでコピーしました。
ところどころ#N/Aがありますが、これは注文番号が見つからなかったところ、つまり3日前のデータから新しく増えたレコードになります。
なので、差し当たりは#N/Aのままでよいでしょう。
ひとまず、式を入れたので、値貼りしておいてください※50。
ハイ、vlookupを使って一応は「3日前のデータ」をとなりにガバッともってくることができました。
あとは、いつものように条件付き書式を使って比較してやればOKです※51 ※52。
こんな感じ。
vlookupでとなりにデータを引っ張ることで、並べ替えたり、ちまちま挿入削除したりせずに、差分を割り出すことができました。
あ、でもね、このやり方だと、「3日前のデータ」→「最新データ」間で何が増えたかはわかるんだけど(#N/Aになって1行まるまる白ヌキになるから)、何が減ったかまではわからないんですよ。
なので、countif関数を使って調べてみましょう。
調べるのは「3日前のデータ」シートの方。
「3日前のデータ」シートの空いてる列を使って、countif関数で調査します※53~55。
検索範囲は、「最新データ」シートの方の「注文番号」です。
できました?
この式ね、「最新データの注文番号に、A52018(3日前のデータの注文番号)は何個ありますか?」って意味になります。
だから、もし最新データの方にもあれば「1」が、最新データからなくなっていれば(=最新データで削除されていれば)「0」が返ります。
ちょっと、おしりまでコピって、フィルタでのぞいてみましょう※56~58。
割り出しできました。
「最新データ」で削除されたレコードは「X02888」です。
あとは、別シートに逃がしてやるなりして、わかりやすくしておいてください。
本日はこんなところです。
並び順がちがうなら同じ並びにしてやればよいし、vlookupを使ってデータをもってくる方法もある。
vlookupを使う場合、件数がちがっても欲しいデータだけ引っ張ってこれるし、並び順も気にしないで済む。
なので、
・件数が同じか、せいぜい1件2件しか違わない → 並べ替えて、単純にとなりにコピペ
・件数がけっこうちがう → vlookup
って使い分けるとよいかもしれません。
ということで、本日はここまで。
シーユーアゲン!