ホーム 前へ 次へ
計算式(VLOOKUP)
計算式
範囲名とVLOOKUP関数を使う

123R5Jの場合
図1
整理番号 製品名 個数 単価 請求金額
1001 @vlookup(a2,$tnk,1) 3 @vlookup(a2,$tnk,2) +c2*d2
1003 @vlookup(a3,$tnk,1) 2 @vlookup(a3,$tnk,2) +c3*d3
合計 @sum(f2..f4)

結果
図2
整理番号 製品名 個数 単価 請求金額
1001 パソコン 3 198,000 594,000
1003 ディスプレイ 2 28,900 57,800
合計 651,800
図3
整理番号 製品名 単価
1001 パソコン 198,000
1002 プリンタ 34,800
1003 ディスプレイ 28,900
1004 マウス 2,380
1005 スキャナー 19,800
1、図3に範囲名を付けます。
ア、H2からJ6まで範囲指定をします。
イ、マウスで右クリックして、範囲名を選択
ウ、


範囲名ボックスに「TANKA」と入力しOKボタン。
これでF6からH10の範囲が「TANKA」となりました。

範囲名を付ける理由
式の中で範囲を「f6..h10」と指定してもかまいません。
ですが、沢山の式を作ると、それが何の範囲を指定したものか、分かりにくくなります。
そこで「TANKA」のようにしておくと、「単価」に関する範囲を指定しているのだな、
って連想しやすいですね。

範囲名には漢字も使うことができますが、式を作成するときは、ほとんど半角モードです。
これに漢字が入ると作成しにくいので、あえてこのようにします。

アルファベットでも、この例のように、その範囲が分かりやすい名前にしておきます。
例えば「kakaku」とかね。

図3では「TNK」(tankaの省略を使いました)
作者は短いのが好きなんで・・・(^○^)

では「@vlookup」関数の説明です。
書式は、@VLOOKUP(照合値,照合範囲,列位置)
@vlookup(a2,$tnk,1)での照合値は、A2(A列2行目)を照らし合わせます。

で、照らしあわす範囲は「tnk」という名前を付けた範囲です。
なお、例では$マークを付けています。
これは式を複写したとき、エラーを出さない為です。
相対的な位置関係の式となっているからです。初級講座6照合

列位置は、右方向に1つ目の列のデータとなります。
つまりこの式は

A2の値「1001」と、
範囲「tnk」の中で、同じ「1001」を探し
もし同じ値があれば
その行の1つ右のデータ(値)を
このセルの中に入力しなさい。


という意味になります。

ポイント
「@vlookup」関数では、照合する値について、決まりごとがあります。
A2の照合する値が、範囲先頭列の値と一致しなくてはなりません。

もし小さな値、例であれば1000以下だと「ERR」が表示されます。
「ERR」はエラー(間違い)のことです。
例では1001以上でなくてはなりません。

また、照合範囲の先頭列の値より大きくなると、先頭列の中の最大を照合することになります。

例題で、2000とかにすると、1005の行を照合するのです。

たとえば
照合範囲のH列が

整理番号 製品名 単価
1010 パソコン 198,000
1020 プリンタ 34,800
1030 ディスプレイ 28,900
1040 マウス 2,380
1050 スキャナー 19,800

だとすると
A2に1035が入るとH4の1030に一致したとみなします。
A2に1500が入るとH6の1050に一致したとみなします。

もう一つ、「参照範囲の先頭の数値は必ず昇順であること」です。

整理番号 製品名 単価
1005 パソコン 198,000
1002 プリンタ 34,800
1001 ディスプレイ 28,900
1003 マウス 2,380
1004 スキャナー 19,800

上の表は悪い例です

数字はだんだんに大きくならなければいけません。

ところで問題があります。
表計算プログラムは、何も数値が入っていないセルを「0」(ゼロ)とします。

+A1+B1

この結果は「0」です。
また「文字」も数値としては同じく「0」とします。

整理番号 100 +A1*B1

この計算結果も「0」となります。

そうすると図1のB列やD列に@VLOOKUP関数が入っているのに
A列に数値が入っていないと、ズラーと「ERR」が並んでしまいますね。
そこで改良したのが、前にも解説した@IF関数です。

整理番号 製品名 個数
1001 @if(a2<1001,"",@if(a2>1005,"",@vlookup(a2,$tnk,1)) 3
1003 @if(a3<1001,"",@if(a3>1005,"",@vlookup(a3,$tnk,1)) 2
合計

横に長すぎるので分割しています。m(__)m

単価 請求金額
@if(a2<1001,"",@if(a2>1005,"",@vlookup(a2,$tnk,2)) @if(a2="","",c2*d2)
@if(a3<1001,"",@if(a3>1005,"",@vlookup(a3,$tnk,2)) @if(a2="","",c3*d3)
@sum(f2..f4)

とします。

D2のセルで解説します。
「もし、A2が1001未満だったら、何も表示させない、そうでなくもし、A2が1005
を超えれば、何も表示させない、そうでなければA2の値と一致する値を範囲名tnkから探し
一致すれば(または近似値でそれより少ない数値)その列の右がわ2番目の値を要れなさい」
となります。

@IFは、このように重ねて使用することもできます。
でも、あまり多く重ねないようにしましょう。
せいぜい、3つぐらいまでとしましょう。

B列、D列の式はとても長いですが、以下はコピーさえすれば良いので
頑張ってください。

ついでにF列もこのように工夫しました。
これが完成品です。
行数が増えたら、この式をどんどんコピーして下さい。
エクセルの場合
少しだけ違います!

照合の列番号が1違うのです。

整理番号 製品名
1001 =if(a2<1001,"",if(a2>1005,"",vlookup(a2,tnk,2))
1003 =if(a3<1001,"",if(a3>1005,"",vlookup(a3,tnk,2))

のように列番号がとなるのです。D列の分は3です。
このようにエクセルでは余分に「1」多いので注意してください。

また、エクセルの式は「=」で始まり、途中には@のようなものは要りません。
もう一つ を注目してください。
先頭に「$」(絶対番地マーク)が付いていません。
エクセルでは、範囲に名前を付けると
自動的に「絶対セル番地(範囲)」になります。

123R5Jでは、$を付けないと相対セル番地となります。
したがって、式をコピーしたときエラーが発生します。


次の図を参考にしてください。
製品番号 製品名 単価
1 2 123の照合列番号
2 3 エクセルの照合列番号
1001 パソコン 198,000
1002 プリンタ 34,800
1003 ディスプレイ 28,900
1004 マウス 2,380
1005 スキャナー 19,800

となっています。
ホーム 前へ 次へ