Fujitsu The Possibilities are Infinite

 

  1. ホーム >
  2. 富士通ジャーナル >
  3. 差のつくビジネススキル >
  4. 役立つEXCEL事典 >
  5. 第4回 お仕着せの関数では飽き足らない。自分で関数を作ってしまおう・・・その2

《連載第4弾》 見積書を作りながら一工夫してみよう
第4回 お仕着せの関数では飽き足らない。自分で関数を作ってしまおう・・・その2

第3回で作成したオリジナルの関数(マクロ)を、いよいよワークシート上で、使ってみましょう。
まずは、【図1】の状態。

【図1】数式を書き込んでみましょう

(1)単価欄に入っていた数式を削除する。
(2)[F24]を選択した状態で、[挿入]-[関数]

関数貼り付け画面が現れます。ここで、
(3)「関数の分類」で、「ユーザー定義」を選ぶと、なんと「単価」という関数ができていることに、驚いてください。【図2】
(ここまでが、前回の内容でした。)

【図2】単価関数の登場

いよいよです。【図2】で、関数名「単価」を選んで、[OK]をクリックしてみましょう。
画面は、【図3】。
得意先コードは、[$C$21]
商品コードは、[C24] (【図1】確認)
として、[OK]。

いかがですか?
[F24]に、39,800 が、表示されましたか?

【図3】Visual Basic Editorを起動します

数式バーで、実際に[F24]に入力されている関数を、確認してみてください。

[F24] = 単価( $C$21 , C24 )
なっていますか?

せっかくですから、ここで、[F25:F28]にも、数式をコピーしておいてください。
前回までで、 =IF(VLOOKUP・・・・・) と、延々と長い式に付き合っていただきましたが、今回は、たったこれだけです。もちろん、第1回の全4行にまたがった数式。第2回のワークシートの他のエリアを使って式を短くした。このどちらとも違う世界を感じていただけましたか?
EXCELは、こんなこともできるのです。

ここで、少し前回のマクロを解説しておきましょう。

Function 単価(得意先コード, 商品コード)
「単価は、得意先コードと商品コードの関数です」という宣言です。
ワークシート上で、 = 単価( $C$21 , C24 ) としたときに、このマクロには、
得意先コードに[$C$21]・・・(002)。 商品コード[C24]・・・(11001)が引き渡されます。
単価 = 0
はじめに、単価は、0円としておきます。
If 得意先コード = "" Or 商品コード = "" Then Exit Function
得意先コードと商品コードのいずれかが入力されていないときは、このマクロを終了します。
得意先ランク = Application.WorksheetFunction.VLookup (得意先コード, Range("C3:E6"), 3, False)
ここは、いろいろな書き方ができますが、今回は、エクセルのワークシート関数(VLOOKUP)を
使ってみました。VLOOKUP以降の書式は、理解し易いと思います。
前半の 「= Application .WorksheetFunction . 」は、Application(EXCELのこと)のワークシート
関数です。という意味です。【図1】の例では、「得意先ランク」には、「B」が入ります。
Select Case 得意先ランク
Select Caseは、後ろに続く「得意先ランク」で判断をしようとしています。
IF xx=”A” then~ と同じようなものなのですが、条件分岐が多いときは、こちらが便利です。
得意先ランクによって、商品リストの何列目の単価を引用するかを決めてやろうという作戦です。
Case "A": 列 = 5
Case “A” ・・・得意先ランクが”A”のとき、列は、5にします。
Case "B": 列 = 6
Case “B” ・・・得意先ランクが”B”のとき、列は、6にします。
Case "C": 列 = 7
Case “C” ・・・得意先ランクが”C”のとき、列は、7にします。
Case "D": 列 = 8
Case “D” ・・・得意先ランクが”C”のとき、列は、8にします。
Case Else: 列 = 0
Case Else・・・上記のどれでもないときは、列を、0にしておきます。
End Select
Select Caseの終了宣言です。
【図1】の例では、「列」は、「6」です。
If 列 <> 0 Then
列が 0 でなかったら・・・・
単価 = Application.WorksheetFunction.VLookup(商品コード, Range("C12:J15"), 列, False)
これは、ワークシート上で、 =VLOOKUP(“11001”,C12:J15,6,false) としたのとほぼ同義です。
Else
列が、 0 だったら・・・
単価 = 0
単価は、0 円 にしておこう。
End If
if 列<>0 then ~ の終了。
End Function
「Function 単価(・・・) は、ここまで」という宣言

少し長くなったのと、解説交じりのマクロで、見にくいかもしれませんが、Visual Basic Editorで、書いたマクロとよく見比べながら、内容を理解してみてください。

マクロは、自動実行のツールと思い込んでいる方。実はこんな用途もあるのです。初めての方には、少し難しかったかもしれませんが、ワークシート上で、とても長い式を書かなければなら無い羽目に陥ったとき。お仕着せの関数だけでは飽き足らなくなったとき(?)
そんなときに思い出してください。一層エクセルの醍醐味に触れられるかも知れません。

次回は、再度目をワークシートに戻して、見積書の完成を目指したいと思います。

経営コンサルタント 谷田貝 敏紀
[2005年8月11日 掲載]

ジャーナル最新のテーマ

今月のテーマ:インフラ最適化 全社視点、経営視点で取り組む「インフラ最適化」 続きを読む


今月のアンケート Q:あなたの会社では「富士通のサーバ」をお使いですか? 集計結果は1月13日から毎週公開 回答する


お客様の声をお聞かせください

富士通ジャーナルに掲載している記事やコンテンツについてのご意見・ご感想を、ぜひお寄せください。

ご意見・ご感想フォーム いただいた、お客様の声


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