2004 [syllabus][Exercise][prev][next]

1. Excelの入力と計算の基本

1.7. 表検索とデータベース

見積書や請求書などを作成する場合,Excelでは商品や顧客の一覧表から目的のデータを検索し,特定のセルに自動的に入力することができる。「品番を入力すると,該当の品名と価格が自動入力される」というような機能を「表の検索」または「表引き」という。このような文書の雛型を作成すれば仕事の能率が上がり便利だ。
Excelは簡単にデータベースを作成できる。大量のデータの中から目的のデータを検索して、「顧客の名前を入力すると,関連するデータが一気に取り出せる」という仕組みを作るにも「表引き」機能を利用する。
表を検索して該当するデータを取り出す方法には,主に3つのパターンがある。その主役は「VLOOKUP関数」または「HLOOKUP関数」だ。VLOOKUP関数は,表の左端列で検索値と合致するデータを探し,その右側のセルにあるデータを取り出すことができる。

練習1:
つぎのような請求書の雛型を作成する。品番を入力すると,商品一覧表を検索して該当の品名と価格が自動入力される,小計から合計まで計算できるようにする。この図にはありませんが,今回は書棚Bの数量を「2」で,PファイルA(10枚)の数量を「5」を加えて請求書を作成してみます。
init table ブック名「表検索」
最初の行について説明する。まず,品番列のセルに品番を入力する。セルB5に,VLOOKUP関数を使い品名列のセルに該当する品名の値を表示する。これで,セルA5の品番に該当する品名がセルB5に表示される。
=VLOOKUP ( A5,G4:I18, 2, FALSE )
[検索値][範囲][列番号][検索値の型]
品番商品一覧表のデータベース. 商品一覧表の2列目. 完全一致
VLOOKUP関数は,「検索値」に指定した値を,「範囲」に指定した表の左端で探し,該当する行の「列番号」で指定した列からデータを取り出す。列番号は表の左から,1,2,3,...と数える。品番のように検索値と完全に一致する値だけを探したい場合は,「検索値の型」を「FALSE」と指定する。また,「検索値の型」を「TRUE」と指定するか省略すると,「〜以上」のような条件で該当するデータを検索できる。この場合はあらかじめ「範囲」の表を左端の列のデータに対して昇順で並べ替えておく必要がある。
単価列のセルC5にもVLOOKUP関数を使って表引きで単価を入力する。数量列のセルD5にたとえば「1」を,小計列のセルE5に計算式「=C5*D5」を入力しよう。
次に請求書の雛型を作るために,セルB5とセルC5の計算式をB10とC10まで複写する。ただし,範囲は絶対参照に修正しておくことを忘れないように注意する。 すると,検索値に指定した品番のセルが未入力のところでは,VLOOKUP関数はエラーを表示する。
6CS20PCチェアS8,500\0
7#N/A#N/A#N/A
8#N/A#N/A#N/A
検索値が未入力の場合のエラー表示を防ぐには,「IF関数」と組み合わせて処理を記述する。「検索値のセルが空欄なら何もせずに表示を空欄にし,そうでなければVLOOKUP関数を使って検索して得られたデータを表示する」という場合わけの処理を,IF関数を使って次のように指定できる。
= IF ( A5 = "","", VLOOKUP ( A5,G4:I18, 2, FALSE ) )
[論理式][真の場合][偽の場合]
品番セルが空欄. 品名を空欄にする. 品番を検索して品名を表示する.

練習2:
2つめのパターンは表の縦横で該当する項目を検索したいときで,このようなときは,「MATCH関数」と「INDEX関数」を組み合わせる。検索の位置はどこでもよく,表を縦横に検索したり,表の右端や2列目など様々な位置で検索してデータを取り出せる。 「MATCH関数」を使えば,目的のデータが一覧表の何行目か,または,何列目かが分かる。この結果を「INDEX関数」で利用すればINDEX関数は,一覧表の「何行目かつ何列目」の位置を指定してデータを取り出すことができるという手順になる。
今回は,請求金額と配送先に応じた配送手数料を自動計算できるようにしたい。配送料金表は,請求金額が「〜以上,〜未満」で区分けする場合の「〜以上」に当たる数値の昇順で並べて作成しておく。Excelでは「〜以上」に当たる数値の昇順で対照表を準備する,これは必ずそうしなければならない。
init table
init table
まず,請求金額が配送料金表の何行目に該当するかを調べる。セルC24に求めておく。MATCH関数の「検査範囲」に「〜以上」で請求金額を区切る数値の入ったセル範囲「G22:G27」を指定し,「照合の型」は検査値以下で最も近い値を探すモードを指定する「1」とする。
= MATCH ( E13 , G22:G27 , 1 )
[検査値][検査範囲][照合の型]
調べる請求金額. 請求額の区分値のある列. 以下で最も近い値を探す.
次に,配送先が検査表の何列目に該当するかを調べる。セルC25に求めておく。M照合の型には「0」を指定して「完全に一致する値」だけを探すモードに設定する。
= MATCH ( E21 , H21:I21 , 0 )
調べる配送先. 配送先のある行. 完全に一致する値を探す.
請求金額に該当する請求額の行と配送先の列が検査表の「3行目×1列目」などと分かったら,最後に,「INDEX関数」を使ってその位置から目的のデータを取り出す。INDEX関数の引数も3つある。「範囲」に検査表のデータ範囲「H21:I27」を,「行番号」と「列番号」にMATCH関数で調べた値があるセル「C24」と「C25」をそれぞれ指定すればよい。
= INDEX ( H21:I27 , C24 , C25 )
[範囲][行番号][列番号]
検査表の配送料金データ. 3行目. 1列目.

練習3:
3つ目のパターンは,「商品番号と商品の色番号を指定して,二段階の検索をする」というケースだ。Excelにはこうした検索を一括して実現するワークシート関数はないが,VLOOKUP関数などでうまく検索できるような検索用の補助データを用意することによって可能になる。
商品データの一覧表を手直ししておく。この表では「色番号」が商品の間で重なっていることに注目して欲しい。VLOOKUP関数やMATCH関数は,検索範囲の表に重複するデータ値がある場合,その一番上(最初に該当するもの)しか検索できない。これはかなり問題を難しくしている。
init table   init table
こんな難問を解決するには,「重複がない固有の色番号」を導入するために,データ列を追加し,これを作業列とし扱う工夫をすればよい。 この例(右図)では,D列を作業列として挿入する。他の品名と重ならない固有の色番号を用意するには,たとえば,色がパインのPCデスクSに対しての式なら「=A11&C11」のように,品番と色番号を結合すると簡単に番号が定まる。記号「&」は文字列の連結演算子である。
品番と色記号をそれぞれB2とB3に入力すると,B5に「品名」,B6に「色名」およびB7に「単価」が表示されるように,B5からB7の各セルにVLOOKUP関数を使った適切な計算式を入力する。

課題 4 :
今日の練習結果を「レポートの様式」で提出する。練習1で,書棚Bの数量を「2」で,PファイルA(10枚)の数量を「5」を加えて請求書を作成してあるので,それ以降の結果は参考図とは異なる。セルC6とC7にはそれぞれC5とC6に入力する計算式を表示しなさい。
--
参考文献
1) 日経PC21 2003年7月号 p.28 "エクセルの「疑問・難問」一挙解決!
2) 日経PC21 2004年12月号 p.65 "VLOOKUPで「表の検索」自由自在
--