- ベストアンサー
エクセルのVBA関数の実行する方法は
お世話になります イメージを描きやすいように、例を挙げます Function sample() MsgBox("こんにちわ") End Function と こんな関数をエクセル上で Visual Basic Editorアイコンを押すと VBA画面が開きますから、コードを書くところに 上の3行の関数、sample()、を記入します 左のイミディエイトウィンドウ(環境によるかも知れません) に sample(Enterキー) と入力すると Sub または Function が定義されていません と、エラーが出ます ACCESSのVBAであれば、これで実行できる、とおもいますが エクセルの場合はどうするのでしょうか
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >ACCESSのVBAであれば、これで実行できる、とおもいますが >Function sample() > MsgBox("こんにちわ") >End Function 初歩的なことですが、Access は、実際には、コントロール側から、ユーザー定義関数を働かせますが、Excelの場合は、通常は、実行型のプログラムは、ユーザー定義関数ではなく、マクロ型(Sub ~End Sub)にします。もし、Excelで実行型のプログラムが必要な場合は、直接コントロール(例:Sub CommandButton1_Click() ~End Sub)に入れてしまえばよいからです。 また、Excelの場合、Function は、複雑な計算に用いるもので、いわゆる設定させたりする、実行型のプログラムは、静的な空間では、通常は不可能なのです。(それを起動させているのは、通常は、それをサブルーチンにして、Enter や別のプロシージャなどの外部的な命令です。) したがって、例えば、書式を変えたり、入力させたり、メッセージを出したりというのは、ユーザー定義関数では不可能です。(絶対的ではありまんせが、それは、めったに用いられない裏技です。) Excel の場合、 なぜ、[イミディエイトウィンドウ]から、そのようなコードを実行しなくてはならないのか、意味が分かりませんが、 Call sample() とすればよいです。 ただし、そのまま、その関数を実行させるには、標準モジュールに書いてないといけません。 通常は実行型にするためには、以下のようにします。 Sub TestPrc1 MsgBox "こんにちは" End Sub Excel上では、実行型のユーザー定義関数は、なるべく、マクロ型(Sub ~End Sub[引数のない完結型])にした方がよいです。また、Accessからコードを移植する場合は、多少、両方のVBAの知識が必要です。
その他の回答 (3)
- onlyrom
- ベストアンサー率59% (228/384)
>Sub または Function が定義されていません ということはコードが標準モジュールではなくてシートモジュールに書かれているはずです。 VBEのタイトルバーに、Sheet1[コード]などとシート名が表示されてませんか? シート名が表示されていればそのシートモジュールにコードが書かれているわけですから、 実行する場合は、Sheet名.Procedure名となります。 Sheet1.Sample Enterキー ただ、質問のようなコードは通常「標準モジュール」に書きますから、「標準モジュール」に書けば、質問のように Sample Enterキー で実行できます。
お礼
よくわかりました 実行できました 助かりました
- mshr1962
- ベストアンサー率39% (7417/18945)
#1です。一つ忘れてた。 イミディエイトウィンドウ上で実行させる場合は Msgbox sample() とか Print sample() のように結果をどのように処理するか設定すれば確認できます。
お礼
ありがとうございました
- mshr1962
- ベストアンサー率39% (7417/18945)
ユーザー定義関数ならセル上で =sample() と入力してEnterですね。 でも内容が計算の結果でなくメッセージの表示ならマクロとして登録のうえ マクロの実行(登録したボタンorショートカットキー)の方がいいのでは?
お礼
ありがとうございました
お礼
ありがとうございました ACCESSとの違いをわかりやすく していただき、助かりました