《連載第4弾》 見積書を作りながら一工夫してみよう
第1回 頑張れば、何とかなる(IF と VLOOKUP)
シリーズ第4弾を開始します。今回は、6回シリーズで、前半は長~い数式を何とか短くする工夫について。
後半は、ワークシート上に、チェックボックスやリストボックスなどを貼り付けてみることにトライしてみようと思います。
まずは、前提条件。得意先リストと商品リストを一緒にした見積書を作ってみました。少し大きいですが、全体像を確認してください。【図1】
見積書で、「得意先コード」を入力すると「得意先名」が。「商品コード」を入力すると「商品名」と「得意先ランク」応じた「単価」が表示されるようにしてあります。

次は内容について
- 【得意先リスト】
- 数式はまったく入っていません。
- 【商品リスト】
- 仕入価格は、標準価格×[F11]の率 [F12] =ROUND($E12*F$11,0) ・・・同様に[F15]まで。
得意先ランク別販売価格は、AランクからDランクまで、それぞれ仕入価格と同じ考え方で数式がセットされています。[G12] =ROUND($E12*G$11,-2) ・・・同様に[J15]まで。
ROUND関数と、セルの指定に、「$」を付ける絶対セル参照は、以前のシリーズで概説しましたので、大丈夫ですよね。ちなみに、仕入単価は、円未満を、販売単価は、百円未満を、それぞれ四捨五入する設定にしました。
さて、では問題の見積書の内容を見てみましょう。まず、
- 【見積日】
- [H20]=NOW ( )
今日の日付が表示されます。ただし、現実に見積書を作成する場合、このNOW関数は、「見積日の入力忘れや間違いを無くす」というメリットと、「一度作成して保存した見積書を再度開いたときに、日付が変わってしまう」というデメリットがあるので、要注意です。 - 【得意先名】
- [D21]=VLOOKUP(C21,$C$3:$D$6,2,FALSE)
[C21]得意先コードが入力されると、得意先リストを参照して、しかるべき得意先名を持ってきます。
VLOOKUP関数もおなじみだと思いますのが、忘れてしまったという方は、前シリーズを参照ください。 - 【商品名】
- [D24]=VLOOKUP(C24,$C$12:$D$15,2,FALSE)
得意先名と同じ関数です。 - 【単価】
- ここが問題です。入力された得意先のランクに合わせた販売単価を引用したい・・・そう思うと、ここは、条件判断がいるから、「IF関数とVLOOKUP関数を組み合わせて使えばいいだろう」ということになります。
そこで、入力された数式が、
[F24] = IF(VLOOKUP($C$21,$C$3:$E$6,3,FALSE)="A",VLOOKUP(C24,$C$12:$J$15,5,FALSE),
IF(VLOOKUP($C$21,$C$3:$E$6,3,FALSE)="B",VLOOKUP(C24,$C$12:$J$15,6,FALSE),
IF(VLOOKUP($C$21,$C$3:$E$6,3,FALSE)="C",VLOOKUP(C24,$C$12:$J$15,6,FALSE),
VLOOKUP (C24,$C$12:$J$15,7,FALSE))))
もし、ランクが「A」ならば・・・、「B」ならば・・・・というわけです。自分でこの式を入力していて、3回もエラーを出してしまいました。“)”が、4つにもなってしまいました。しかし、あとは、必要個所に数式をコピーして、何とか目的の機能は果たせることになりました。
得意先コードと商品コードを入力すれば、あとは、数量を入力するだけで、見積書の完成です。
オット、使わない行に、「#N/A」(No Answer)が、表示されてしまっている! 直さないと・・・。
というわけで、
- 【商品名】
- [D24]=IF(C24<>””,VLOOKUP(C26,$C$12:$D$15,2,FALSE),””)
- 【単価】
- [F24]=IF(C24<>””,IF(VLOOKUP($C$21,$C$3:$E$6,3,FALSE)="A",VLOOKUP(C24,$C$12:$J$15,5,FALSE),
IF(VLOOKUP($C$21,$C$3:$E$6,3,FALSE)="B",VLOOKUP(C24,$C$12:$J$15,6,FALSE),
IF(VLOOKUP($C$21,$C$3:$E$6,3,FALSE)="C",VLOOKUP(C24,$C$12:$J$15,6,FALSE),
VLOOKUP (C24,$C$12:$J$15,7,FALSE)))),0)
と変えてみました。(また、一苦労)
でも、商品名の#N/Aが、ブランクに、単価の#N/Aが「0」に変わって、少し見栄えも良くなりましたね。
(参考までに、=IF( a=b , x , IF( b=c , y , IF( c=d , z , IF(・・・・・・・))))という繰り返しには、8レベルまでという制限があります。)
それにしても、長い。「今度から、ランクにSランクを追加するから・・・」、「エ~~!・・・もうヤダ!」
せっかく目的を果たしたのに、もう使いたくない・・・。
今回の連載中にこの式が、最終的には、[F24]=xxxxx(a,b) というところまで、短くしてみせます。
乞うご期待。
経営コンサルタント 谷田貝 敏紀
[2005年5月12日 掲載]
ジャーナル最新のテーマ
お客様の声をお聞かせください

富士通ジャーナルに掲載している記事やコンテンツについてのご意見・ご感想を、ぜひお寄せください。
お寄せいただいたご意見・ご感想については、富士通からの回答をお約束するものではありません。ご了承ください。
なお、富士通からのご回答を必要とするお問い合わせについては、
富士通ジャーナルに関するお問い合わせをご利用ください。





