8日目 10日目

9日目

目標

課題


課題 20

検索

練習1

ある食べ放題レストランでは、年齢に基づいた価格設定を行っている。 各年齢に対する価格は表1の通りである。

それぞれの客が年齢を記入するだけで、価格名と価格を表示し、合計額を 表示できるような伝票を作成せよ。ただし、1グループの最大人数は5人とする。

表1: 年齢別価格表
価格名 対象年齢 価格
乳児 1歳未満 0
幼児 6歳未満 500
小学生 12歳未満 1,000
中学生 15歳未満 1,200
高校生 18歳未満 1,500
一般 18歳以上 60歳未満 2,000
シルバー 60歳以上 1,500

練習2

次の条件を満たすような、納品書を作成せよ。

  1. 表2に示す商品番号と、発注単位数を入力するだけで、商品名、単価、価格が表示されること
  2. 最大6品目まで記入できること
  3. 税抜き価格の合計を「小計」として表示できること。
  4. 「小計」の 5%相当額を「消費税」として表示できること
  5. 「小計」と「税額」を合わせた額を「合計」として表示できること。
表2
 
商品番号 品名  量   価格(税抜) 
040 キャベツ 1玉 198
044 レタス 1玉 189
048 なす 5本 170
079 スイートコーン 1本 131
081 キュウリ 3本 141
082 ニンジン 500g 150
084 玉ねぎ 500g 131

セルの検索(LOOKUP 関数群)

ある範囲から、特定の条件に一致するようなセルを探しだし、 そのセルの値や位置を求めることができる。 例として、ここでは商品番号をもとに、商品名や単価を検索することを考えている。 この目的に用いる関数は「検索/行列関数」に分類されている。 検索範囲や検索方法によって次のような関数や方法を利用することになる。


検索に利用できる関数の特徴をまとめると次のようになる。

関数名 検索方向 検索範囲に対する
表示するデータ位置
検索型
厳密 近似
VLOOKUP
HLOOKUP
LOOKUP 左右 ×
上下
INDEX + MATCH - -
LOOKUP ウィザード - - ×

解答例(練習1)

表1をコピーしたあと、対象年齢と価格の間に1列挿入し、各年齢層の「最小値」を 記入する。

「最小値」を用意するのは、あらゆる年齢が表1に含まれているわけではないのに、 任意の年齢に対して価格を決める必要があるため、「近似」探索を行うからである。 (近似探索とは、「検索値未満の最大値」の探索であったことに注意)

lookup 1

「境界年齢」を「価格名」よりも右に設定したため、VLOOKUP 関数は利用できないので、 関数 LOOKUP を利用する。

引数の選択では、「検査値、検査範囲、対応範囲」を選択する。

lookup 2

「価格名」をまず設定する。検査値は「年齢」を 検査範囲には表1の「境界年齢」を、対応範囲には「価格名」を指定する。 あとで、コピーする場合は、セル参照の方法を良く考えること。

うまく、参照方法を指定すると、コピーして、少し修正することで対応できる。

lookup 3

年齢が入力されていないと、価格名が「乳児」となるのはみっともないので、 IF 関数を用いて、年齢欄が空白ならば価格名も空白となるように、修正せよ。

ヒント: 空白かどうかは「セル番地 = ""」で判別できる

lookup 3

解答例(練習2)

商品番号を元に検索する場合、「近似」探索では納品書として役にたたない。 したがって、VLOOKUP 関数を利用する事にする。

注意する点は次の通り

  1. 「範囲」を指定する際は検索する領域が「左端」になるようにすること
  2. 「列番号」を指定する際は、領域の左から何列目かを数字で指定する
  3. 「検索の型」には厳密一致するものを探索するので 0 を指定する。
vlookup

存在しない商品番号が入力された場合、#N/A と表示されてしまうが、これを 背景色を赤で「入力エラー」と表示するように設定せよ。 なお、#N/A かどうかは、関数 ISNA を用いて、「ISNA(セル番地)」で判断できる。

vlookup

小ネタ

値が 0のセルを隠す

上の納品書では、式の結果が 0 になる部分が表示されていない。 このようにするためには、「ツール」→「オプション」を選択し、 「表示」タブを選んだなかにある、「ウィンドウオプション」中の「ゼロ値」のチェックを外せば良い。


8日目 表紙 10日目

tacha@tack.fukui-med.ac.jp
$Id: 09.html,v 1.1 2004/06/14 11:57:54 tacha Exp tacha $