今回は、VLOOKUP関数を使って、エクセルでメインの表を入力するだけで自動的にサブの表を生成する手順を説明します。
商品ごとの売上とか、生徒ごとの成績表とか、いろいろと応用できると思います。
最初の関数設定はちょっと手間がかかりますが、一度設定してしまえば、その後の運用はかなりラクになるはず。
作りたい表は、こんな感じ
「日報」セクションに販売した日付と商品、個数を入力したら、「商品別」セクションに商品ごとの販売日と個数を自動表示させたいと思います。
補助データを追加してVLOOKUP関数が使えるようにする
上図のままではVLOOKUP関数を使うことはできません。
なぜなら、VLOOKUP関数は、「選択範囲内に、●●という文字列がある場合、その行の左から■列目のデータを抽出する」という機能なので、データを抽出する範囲内の各行がユニークな値を持っていなければならないからです。
といことで、表に列を追加して、選択範囲内の各行に検索対象となるユニークな補助データを追加しましょう。
下図の通り、入力する表の左側に2列(A列とB列)を、自動入力したい表の左側にそれぞれ1列(I列、M列、Q列)を追加します。
COUNTIF関数で重複するデータの個数を表示する
次に、B4セルにCOUNTIF関数を入力します。
=COUNTIF($D$4:D4,D4)
B4セルに、数字の1が表示されるはずです。
B4セルの右下角にカーソルを合わせてフィルハンドルを表示させ、そのまま下方向にドラッグして関数をオートフィルします。
下図のようにB列に数字が表示されたでしょうか?
COUNTIFは、選択した範囲の中に指定するデータが何個あるかを数える関数です。
オートフィルの結果を具体的に見てみましょう。
B4セルに入力した関数は以下の通り。
=COUNTIF($D$4:D4,D4)
D4セルからD4セルまでの範囲内にD4と同一のデータが何個あるかを数えます。
この範囲内にD4セルのデータ「すいか」は1つしかありませんから、「1」と表示されるわけです。
「ひとつめの『すいか』」ということですね。
オートフィルでB5セルに入力された関数は以下の通り。
=COUNTIF($D$4:D5, D5)
D4セルからD5セルまでの範囲にD5と同一のデータが何個あるかを数えます。
この範囲内にD5セルのデータ「いちご」は1つしかありませんから、ここも「1」と表示されます。
「ひとつめの『いちご』」ということです。
次に、オートフィルでB7に入力された関数を見てみてください。
=COUNTIF($D$4:D7, D7)
D4セルからD7までの範囲にD7と同一のデータが何個あるかを数えます。
この範囲内にD7セルのデータ「いちご」は2つありますね。ですから、B7には「2」と表示されるわけです。
ここは、「ふたつめの『いちご』」となります。
データを抽出する範囲内の各行にユニークな値(検索値)を持たせる
では、VLOOKUPで特定のデータを抽出することができるよう、選択範囲の各行にユニークな値を設定しましょう。
A4セルに以下の通り入力します。
=D4&B4
D4セルのデータ(すいか)とB4セルのデータ(1)を「&」でつないで連結表示させます。
A4セルに「すいか1」と表示されるはずです。
A4セルの右下角にカーソルを合わせてフィルハンドルを表示させ、そのまま下方向にドラッグしてオートフィルします。
下図のようにA列に商品名と数字が連結表示されましたね?
次に、I列、M列、Q列に連番を振ります。
I5セルに「1」(半角数字)を入力して、I16セルまで連続データとしてオートフィルします。
M列、Q列も同様に。
さて、これで「日報」に入力するだけで「商品別」リストに自動入力させるための準備が整いました。
自動入力させるセルにVLOOKUP関数を設定する
では、自動入力させるセルにVLOOKUP関数を設定していきましょう!
J5セル(1番目のすいかが売れた日付)を選択し、VLOOKUP関数を入力します。
=VLOOKUP($J$3&I5,A4:G14,3,FALSE)
J5セルに、1番目のすいかが売れた日付(5月1日)が表示されましたか?
J5セルの表示に問題がなければ、J5セルの右下角にカーソルを合わせてフィルハンドルを表示させ、そのまま下方向にドラッグして関数をオートフィルします。
下図のようにJ列に日付が表示されたでしょうか?
ちなみに、「#N/A」は「該当するデータが存在しない」ことを示しています。
つまり、「日報」の表で「すいかが売れた日付」は5月1日、15日、22日だけで、それ以外はありませんよ」ということです。
VLOOKUP関数の設定内容について
J5セルに設定したVLOOKUP関数の内容について説明しますね。
VLOOKUP関数は、
検索値に指定した文字列を
指定した範囲内で検索し
合致するデータがあれば、その行の左から何番目の列の値を表示するかを指定
する関数です。
検索方法は、FAlLSE(完全一致)あるいは TRUE(近似値)を指定できます。
具体的に入力したVLOOKUPの条件を見てみましょう。
=VLOOKUP($J$3&I5,A4:G14,3,FALSE)
検索値: $J$3&I5: 絶対参照J3のデータ(すいか)とI5(選択範囲内の何個めのデータか)を連結表示した値(A列の文字列に一致)
検索範囲: A4:G14: A4からG14までの範囲(すなわち「日報」と上述の手順で設定した補助データの範囲)
列番号: 3: 左から3つ目の列の値
抽出条件: FALSE: 完全一致
あえて言い換えると…
「すいか」のひとつめ、ふたつめ、みっつめ…が、
「日報」+補助データの検索範囲内に存在するとき、
範囲内の行の左から3つめ(すなわち、日付)を抽出してね
という感じでしょうか。
「#N/A」エラーを表示させないためにひと工夫~IFERROR関数を追記する
「VLOOKUP関数で『#N/A』エラーが発生したら、そのセルには何も表示させない」という設定を追加することで、この問題を解決できます。
=IFERROR(VLOOKUP($J$3&I5,A4:G14,3,FALSE),"")
J5セルを選択して、上記の通りIFERRORとエラーの場合の値を追記しましょう。
数式欄の「=」と「VLOOKUP」の間にカーソルを持っていき、「IFERROR(」と入力します。
数式欄の一番最後に「,””)」と入力しましょう。
これで、「(VLOOKUP($J$3&I5,A4:G14,3,FALSE)」でデータを抽出した際にもしエラーが発生したら、何も表示させない」と設定できます。
J5セル右下にポインタを合わせてフィルハンドルを表示し、下方向にオートフィルしましょう。
下図のように「#N/A」エラーが表示されていたセルには何も表示されなくなりましたね?
「すいか」の「個数」欄にも関数を設定する
もちろん、日付と同様に関数を手入力してもよいのですが「すいか」の「日付」に設定した関数とほぼ同じなので、関数をコピペする方法を説明しますね。
その方が早いし、誤入力も避けられるので。
J5セル(「すいか」の「日付」)を選択した状態で、数式バーをクリックし、ctrl + a で数式を全選択しましょう。
そして、ctrl + c で数式をコピーします。
その状態で、tab で隣のセル(K5 「すいか」の「個数」)に移動し、ctrl + v で数式をペーストします。
上の手順で関数をK5セル(「すいか」の「個数」)に貼り付けたら、参照すべき「列番号」を書き換えましょう。
=IFERROR(VLOOKUP($J$3&I5,A4:G14,3,FALSE),””)
の「3」を「5」に書き換えます。
K5セル(「すいか」の「個数」)欄に、「3」と表示されましたね。
K5セルの右下角にポインタを合わせてフィルハンドルを表示し、下方向にドラッグしましょう。
下図のように、J列の日付に対応した「すいか」の「販売個数」が K列に表示されます。
ちなみに、上図では、「すいか」の「合計」欄に、個数の合計を SUM関数で表示するように設定してあります。
「日報」に入力したデータに基づき、どの商品が、いつ、何個売れたかを自動集計できたら便利だろうなぁと思って。
その他の商品別一覧の「日付」と「個数」に関数を設定する
必用に応じて、自動入力させたいその他のセルにも関数をコピペしていきましょう。
以上 ひとつの表に入力するだけで条件を設定した別の表に自動入力・自動表示させる手順の説明でした。
ご参考になれば幸いです♪