- ベストアンサー
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()の()内にも何か入れなければならないようなのですが、わかりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
関数について (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はユーザー定義関数で使うと思えばよいと思うが、他のプログラム言語を見通すと色々あるようです。
お礼
ありがとうございました。 勉強になります。
- Nayuta_X
- ベストアンサー率46% (240/511)
そうですね。 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 ステートメント をクリックしてみてください。 サンプルもありますので、初心者向きでしょう。
お礼
ありがとうございました。 参考になりました。
- himajin100000
- ベストアンサー率54% (1660/3060)
はい、正しいです。
お礼
ありがとうございます。
お礼
なるほど、引数があってはじめて関数なんですね。 ありがとうございました。