---topics:残念なExcel表、vlookup---

其ノ15 残念なExcel表について&vlookupの注意点

本日のテーマは「残念なExcel」です。
仕事でこれまでいろんな人の作成したExcel表に触ってきたんですけど、正直「…ああ、コリャ使いづらいな」って表、たくさんあったんですよ。 もちろん、間違いではないんだけど…。 作り手が自由に使える、それがExcelの魅力です。 だから、別に方眼紙状にExcelを使ったって良いワケなんだけど…、でも、「目指す業務に適してないよな」って感じることはしばしばある。 そのあたりの雑感についてまとめました。 なので今回は、ほぼ読み物だと思ってください。
あ、あと、vlookupのときよく問題となる、「レコードが重複してると上側の情報しかひっぱってこれない」問題にも言及しました。 ということで、スタート。

残念なExcel表

ハイ、では、「残念なExcel表」っていきなり言われても困ると思いますので、実例を挙げて見ていきましょう。 下↓からダメサンプルをダウンロードしてください。

開くとこんな↓です※1

kiso15_dameexample.xlsx
※1 残念なExcelの例 kiso15_dameexample.xlsx

シートが3枚ありますが、コイツラはみな全部ダメな例です。 マネしないようにしましょう。
じゃあ、どこがダメなのか。
それをこれから、1コずつ見ていきましょう。 まずは1枚目のシート「dame1」から※2

1枚目のシート どこがダメなのか
※2 1枚目のシート どこがダメなのか

このシートを観察して、どこがダメなのか、一緒に考えてみましょう。
ハイ、スタート。



…いくつかダメなところあるんですが、まずさしあたり初歩的なとことして※3

dame1のダメなとこその1 左を空ける必要ある?
※3 dame1のダメなとこその1 左を空ける必要ある?

なぜ一番左(A列)が空いてるのでしょうか?
意味もなく左を空ける必要はありません。 ぴっちり左詰めではじめれば良いんです。 オライリー社から出版されてる『Excel Hacks』第2版でも、ぴっちり左を詰めてはじめることが推奨されてました。
また、上が3行空いてるのも、果たして必要でしょうか。 …ま、もしD関数ってヤツを使う気でしたら上部にアキがあると便利だったりするのですが、そういう特別な理由がないかぎりは上部を空けるのはムダです。 左上、つまり1行目1列目から表を作りはじめましょう。
行為は、特にビジネス上の行為は、「理由」や「意味」に基づかなくてはなりません。 だから、もし空けるのであれば、それ相応の理由が必要なんです。 意味なく空ける必要は、ありません。

上述の『Excel Hacks』第2版では、
・左はぴっちり詰める
・上は3行空ける
が推奨されてました。 で、上を3行空ける理由は上述のD関数のためです。
なので、D関数を使う気がないのであれば、われわれとしては特に上部も空ける必要はないかと思います。

なので、特に理由のないかぎりは、ぴっちり左上から表を作ってください。 こんなふうに↓※4

ぴっちり左上から表を作り始めること
※4 ぴっちり左上から表を作り始めること

さて、次。
表のとちゅうにまるまる1列空いてるところがありますよね? …そう、G列※5

dame1のダメなとこその2 なんでG列空いてるの?
※5 dame1のダメなとこその2 なんでG列空いてるの?

以前にも書きましたが、表のとちゅうでまるまる1列空いてると、そこから先をExcelは表と認識できなくなります。 そうなると、フィルタや並べ替えのときに範囲として含まれなくなってしまい、…まあフィルタぐらいだったらなんとかなるけど、並べ替えのときに並べ替え範囲に含まれなくなるのは超キケン!です。
なので、アキ列は詰めてしまうか、どうしても空けておかなければならないのであれば1番上の項目名(ヘッダー)のところを「未使用列」とかなんとか適当な名前をつけて埋めてください※6。 1番上だけで結構ですので。

ヘッダー行はきちんと制作しましょう
※6 ヘッダー行はきちんと制作しましょう

こうしておけば、並べ替えの際いちいち範囲指定しなくて良くなります。
なので、「…項目名つけるのめんどくさい…」とか言わずに、ヘッダー行はちゃんと作る・きっちり埋めるよう心掛けてください。 その方が、長い目で見て効率的ですし、「並べ替えしたら中身がズレてしまった!」みたいな悲しいミスも防げますよ。 それに、ヘッダー行がちゃんとしてないと、そもそもの範囲指定もやりにくくなるし、ね。

一番右の、「○」とか「×」とか入ってるところも同様です※7。 項目名がありませんね。

dame1のダメなとこその3 一番右にヘッダーないけど?
※7 dame1のダメなとこその3 一番右にヘッダーないけど?

なので、一番右のところにも、「備考」とか「メモ」とか名前は何でもよいので、項目名をつけましょう。
…たまーにこんなふうに、Excelの一番右にメモみたいなのを残す人いますが、フィルタかける都合とか考えてほしいものです。 もしメモ残したいのであれば、ヘッダーもちゃんとつけましょう。 約束です。

…ということで、この表のあるべき姿はこう↓です※8

ダメポイントを改善しました
※8 ダメポイントを改善しました

改善ポイントは3つ。
・左や上に無用なアキを作らない
・表の途中を意味もなくまるまる1列空けたりしない
・ヘッダー行(項目名)はきっちりつくる
ひとつひとつは小さなことですが、心がけておいてくださいね。 きっと良いことがありますよ。

上の※8の「あるべき姿」の画像に対して、「アレ?罫線とか入れた方がいいんじゃない?」とか無粋なツッコミをされる方がいて…、…うーん、あのね、僕が問題にしてるのは「見た目の問題」じゃないのね。 「データの作り方」なのよ。 作業しやすくて、事故が起きにくいような、そういうデータの作り方の話をしてるんです。
罫線とかの「見た目の問題」は、…うーん、好きにすれば良いんじゃないでしょうか。 でも、そこは本質じゃありません。 人間もそうだけど、大事なのは見た目じゃないでしょ。 だから、見た目で判断しないでください。 お願いします。 …ぜひ、お願いします。

では、ガッテンしていただけた方もそうでない方も、とりあえず先に進みましょう。 2枚目のシート、見てください※9

2枚目のシート
※9 2枚目のシート

…コイツも左上からはじまっていませんね。 ま、そこは直していけば良いのですが…。
あと、F列の「男」「女」と入力されてるところ、ヘッダーがありません※10

ヘッダーがねえぞ!
※10 ヘッダーがねえぞ!

なので、「性別」とか、適当な項目名を入れてやってください。

…あと、やっぱり気になるのが、一番左のところですね。 「除名」とか「脱退」とか入力されてるところ※11

ヘッダーつけてやればよいんだけど、それだけでは最左列として不適切
※11 ヘッダーつけてやればよいんだけど、それだけでは最左列として不適切

ここもやっぱりヘッダーがないので、それは埋めてやればよい※12のだけれども、でもそれだけじゃちょっと足りなくて。

いちおうヘッダーつけましたが…
※12 いちおうヘッダーつけましたが…

この列って、「除名→」とか「脱退→」とかメモってあって、値が入力されてたりされてなかったりする列、つまり、ところどころ空白がある列じゃないですか。
でね、しかもここって、表の左端にあたる。
実は、表の左端、最左列にあたるところは、おしりまで空白なくぴっちり埋まってる方が扱いやすいんですよ。

なぜかって言うと、ヘッダーをきっちり作るのと同じ理由です。 もしこの表のとちゅうに横1行まるまる空白のところがあると、Excelはそこから下を表として認識してくれなくなるからです。 こういうことは、制作の途中段階の表や、あるいは3ヶ月とか半年とかの長いスパンで入力を進めていくような業務のときに、しばしば起こりうることです。

要は、Excelにとってわかりやすい表、Excelが理解しやすい表を作ってほしいんですよ。 そういう意味で、この列は最左列として不適切。
なので、最左列に新しい列を挿入し、そこに「No」とか名前をつけて連番をふって、ところどころアキのある列が一番左に来ないよう工夫してあげましょう※13

最左列に連番を入れた
※13 最左列に連番を入れた

連番なら、空白なくおしりまでぴっちり値を入力することができますゆえ。
なので、表を作るときは、
・最左列には空白なくおしりまできっちり埋まるものを選ぶ。なければ「No」列などを作る
・最上段(ヘッダー行)はきちんと埋める。項目名なしのところを作らない
ってのを、心がけてください※14

最左列に連番を入れる件の解説
※14 最左列に連番を入れる件の解説

…あ、あと、一番左と一番上がきっちり埋まっていると、Ctrl + Shift + 矢印キー(↑↓←→)で範囲指定するときなんかにスムースに操作できて気持ちイイです。 快適な操作環境は、事故なく仕事する上で大事ですよ。

ホントはこういうメモ書きみたいなのって、一番右にあった方がいいけどね…。 このリストにおいて大事な情報って人の名前でしょ。 日本人は左から右に、上から下に読むよう訓練されているから、重要度の高い情報は左側(タテ書きだったら上側)に配置するのが自然なんだよね。 だから、さ。

ハイ、では次。 3枚目のシート行きます※15

3枚目のシート
※15 3枚目のシート

この表なんですが、…最低です。 ぼくは一度コレと同じかたちの表に出くわしたことがあるのですが、ホンットに仕事しづらかったです。 しかもこのデータがシステムから吐き出したデータだと知ったときは、開いた口が塞がりませんでした。 …システム屋なら、このデータがどんだけ扱いづらいかわかるだろうがァッ! 「…だって、お客様のオーダーに応えただけだモン」とかシステム屋は言い訳するでしょうが、お客様を教育するのもシステム屋の仕事だ! まったく!

…ちょっと熱くなってしまいました。
この表の何がそんなにダメかと言いますと、セル結合を使って、2行分使って1レコードを表現してるところが著しくダメなんです※16

ダメポイントの解説
※16 ダメポイントの解説

この表のフィルタを覗くと、特に「no」列や「商品名」列なんですが、「空白」のレコードがあると思います。 つまり、2行1レコードに対してうまくフィルタがかけられない状態になってます※17 ※18
(要は、セル結合した下側のセルは空白、という扱いなんですね。)

フィルタをかけると…
※17 フィルタをかけると…
2行目(下側)の情報が表示されない
※18 2行目(下側)の情報が表示されない

なのでですね…。
この表は、セル結合なんか使わずに、ちゃんと1行で商品情報を収め、1レコード:1行にするべきなんです※19。 そうすれば、ちゃんとフィルタもかけられるし、並べ替えもピボットテーブルも思いのまま、です。

改善するならこのかたち
※19 改善するならこのかたち

ということで、ダメなExcel表の例を3つ挙げてきました。 もちろん、絶対ダメってワケじゃないし、業務内容とかこれまでの仕事のやり方の継承とかで仕方ないこともあるんだけど(例えば、印刷の都合上3枚目のシートみたいなかたちにせざるを得ないこともある)、でも本来の仕事のしやすさを考慮すると避けた方が良い問題だと思いますので、みなさんも、これからはじめる仕事については、注意されてはいかがでしょうか。

vlookupのとき気を付けること

ハイ、ここからは全然ちがう話。
「vlookupのとき、重複データがあるとうまくいかない」って話をしたくて、でもどこに書いたらいいか悩んだのですが、「ダメなExcel」ってくくりでココに書いておきます。

ハイ、では、残念なvlookupについて、実例を挙げて見ていきましょう。 下記↓からダウンロードお願いします。

コイツを開くと、シートが2枚あります。
シート1「売上データ」はこんな感じです※20

1枚目のシート
※20 1枚目のシート

これの右端の列「会社住所」を、シート2「会社情報テーブル」からもってきてほしいんですけど…。
で、シート2はどんなものかというと、こんなふうに↓なっています※21

会社IDに重複がある
※21 会社IDに重複がある

…会社ID「187」が2つありますね。 いやな予感がします。
が、とりあえずこのままの状態で、会社IDを軸にして、「会社住所」を引っ張ってきてみてください。
すると、こう↓なります※22

会社IDを軸にvlookupをすると…
※22 会社IDを軸にvlookupをすると…

「大一番ソフト」の住所が「ウルケミ」と同じになってしまいました。 「大一番ソフト」は大阪のはずなのに…。

実は、vlookupは、2コ目の引数(検索範囲)で指定した範囲を上から検索して、最初にぶつかった情報をもってくる、という動き方をします。 だから、「187」が検索値である以上、永遠に「東京都渋谷区~」の住所しか持ってこないんです。
つまり、データ元の方でダブっている情報は、上側しか有効じゃない※23

vlookupの挙動 上から見に行くので、重複があると上のデータしか有効にならない
※23 vlookupの挙動 上から見に行くので、重複があると上のデータしか有効にならない

でね、「こういうとき、どうしたらいいの?」って質問をネット上でされる方、けっこういるみたいです。 つまり、元データにダブリがあるままvlookupをするにはどうしたらよいか、という。 で、それに対して、複雑な関数を駆使して回答してくださる方もいるみたいです。

他方、今回のサンプルデータの場合に話を限りますと、現状のママでも、「会社ID」じゃなくて「会社名」の方でvlookupかければ、狙った結果が得られるでしょう。
また、仮にデータ量がもっと多かったとしても、会社IDと会社名を結合した文字列を作ってそれで作業すれば、もしかしたらうまくいく、かもしれません。

…けどね、「そもそも」ですよ? …そもそも、「会社ID」がダブってるのがまずもっておかしいんです。
なので、今回のように、「会社ID」がダブってるのであれば、新しいIDを振り直す(あるいは、権限者に振り直してもらう)必要がある。
だから、vlookupする前に、
・重複してるレコードはないか
調べる必要があるんです。 vlookupの下準備として。

データ重複の調査については、countif関数が役立つでしょう。 countif関数の使い方については、其ノ9其ノ10にまとめてあります。 ご一読ください。
ぼく自身は、vlookupを使うとき、下準備というか、元データの精査にすごく時間をかけてます。
割合で言うと、「元データの精査9:vlookupする時間1」くらいの割合です。
その際、ぼくが何をやっているかというと、
1. 「ID」など、vlookupの軸となるデータに重複がないかどうか調べる
2. もし重複があるのであれば、それらに差異がないかどうか、異なる情報が紐づいていないか調べる
という作業です。 要するに、其ノ10でやった作業ですね。 というワケで、其ノ10でやったことも役に立つんだよ…、ということなのですが、とりあえず今回、知識として、「vlookupは重複があると上側の情報しかもってこれない」ということ、覚えておいてください。 ではでは。

Copyright(C)森田表計算