• ベストアンサー

VBAでFunctionの使い方

エクセルのVBAでFunctionの使い方がいまいちよくわかりません。 Function msg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: msg = "おはようございます。" Case Is < 17: msg = "こんにちは。" Case Else: msg = "こんばんは。" End Select End Function Sub 挨拶() MsgBox msg End Sub とやってみたら一応正しく動くようですが、これであっているのでしょうか? 他の例などを見るとFunction msg()の()内にも何か入れなければならないようなのですが、わかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

Functionは、関数と約されていますように、パラメーター(引数)を与えて、戻り値を得るという目的で使われる場合が多いです moooonさんの例では、引数が有りませんが、特に問題は有りません もし、例のFunction msg()を、関数らしくするとすれば、こんな感じになります Function msg(ti)  Dim h As Integer  h = Hour(ti)  Select Case h   Case Is < 12: msg = "おはようございます。"   Case Is < 17: msg = "こんにちは。"   Case Else: msg = "こんばんは。"  End Select End Function Sub 挨拶()  MsgBox msg(Time) 'Timeの値が引数として、tiに渡されます End Sub

moooon
質問者

お礼

なるほど、引数があってはじめて関数なんですね。 ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

関数について (A)引数 (1)引数があり、 (2)引数なし、 (3)一般にあるとしているが今回なし(Optional) (B)値を返す点で (1)値を返さない (2)値を返す と分けてみると 質問は(A)(2)且つ(B)(1)のケースですが 一般には(A)(1)且つ(B)(2)が多いわけです。 (3)(1)はSUBプロシージャーと変わらなくなる。 今回はVBA(例えばエクセル)ですので、Functionの中で 他のセルの値や書式などを一切触らせてくれません。 言語によっては値を返すのが基本というのがあり、Subプロシージャと余り変わらず、なんでもできるのもある。 (1)値を計算(導出)主体     (A)値を返すが本旨     (B)主義を通して、VOIDを宣言 (2)計算以外の処理をするが主体 引数は今回はTimeというシステムから時刻を採る特殊なものだったので、引数が無くても結果を返せたのです。 送でなければ、円周率パイを計算するような定数と計算だけで値が出る以外のケースでは、処理の材料になるデータ(エクセルの場合はセル番地を指定して知らせるセルの値)が必要です。 すなわち諮問者は特殊なケースの関数を書いて、質問しているわけです。 エクセルVBAでは、普通のエクセルワークシート関数が、99%()内に引数があるように、通常は引数はあるといえるでしょう。 数学の関数のように セルの値ーーー(普通関数・ユーザー関数で)写像ーーー>値 ですから元の値が無いケースは、例外的です。 ーーー エクセルVBAでは、Functionはユーザー定義関数で使うと思えばよいと思うが、他のプログラム言語を見通すと色々あるようです。

moooon
質問者

お礼

ありがとうございました。 勉強になります。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.3

そうですね。 Functionの使用(利用)方法には、いろいろありますので、あながち あなたのような 使用方法も 否定出来ません。 しかし、本来は、もっと違った方法が、一般的です。 詳細は、下記 URLを参照してください。 1.お勧め URLは下記から Excel(エクセル) VBA入門:ユーザー定義関数を利用するから [ Functionプロシージャ(Procedure) ]を参照します。 http://pcsoft.okwave.jp/kotaeru_reply.php3?q=3130664 2.次点 URLは、http://www.moug.net/boards/index.htm から入って、左ペイン から 即効テクニック を選択し Function を検索してください。 一発で 開けるか自信ないです(登録制なので)が、URL は、http://www.moug.net/tech/exvba/0150074.htm をクリックして見るのも良いでしょう。( 例; 引数が不定の場合-ParamArrayキーワード) 追加です。下記も参考にね。 http://www.moug.net/tech/exvba/0090039.htm 3.3番目は、ステートメント(基礎編)から 11 Function ステートメント をクリックしてみてください。 サンプルもありますので、初心者向きでしょう。

参考URL:
http://www.geocities.jp/cbc_vbnet/kisuhen/statement.html
moooon
質問者

お礼

ありがとうございました。 参考になりました。

回答No.1

はい、正しいです。

moooon
質問者

お礼

ありがとうございます。

関連するQ&A