• 締切済み

VBAのプロシージャのsubについて

VBAのサブルーチンとプロシージャについての質問です。 VBAのプロシージャは,サブルーチンのsubで書き始めると思いますが, どうしてプロシージャなのに,サブルーチンのsubで書き始めるのでしょうか?

みんなの回答

  • SI299792
  • ベストアンサー率48% (719/1487)
回答No.2

 私も、最初は戸惑いました。メインルーチンなのに、Sub ~End Sub をつける。  VB VBSならメインルーチンは、いきなりプログラムを書くことが可能です。(必要なのはサブルーチンのみです)  多分、VBA の場合、ボタンを押す等何らかの形で呼び出す(その為には名前が必要)からだと思います。(VB VBSなら、メインルーチンは1つなので、名無しでもいい)  これは、こういうものだと割り切るしかないです。

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率43% (8536/19406)
回答No.1

VBAでのプロシージャとは「処理内容がひとまとめになっているもの」を指し、sub~end subで囲まれた物、function~end functionで囲まれた物を指します。 ですので「VBAのプロシージャは,サブルーチンのsubで書き始める」と言うのは誤った認識です。subで書き始めるのだけに限定しちゃうとfunctionプロシージャをプロシージャと呼べなくなってしまいます。 プロシージャには、subで書き始める物もあれば、functionで書き始める物もあります。 subプロシージャは、返り値などを持たず、大昔のBASIC言語のSUB ROUTINE(サブルーチン)と同様の働きをするので、予約語subが使われます。 functionプロシージャは、返り値などを持ち、関数(FUNCTION)の様な働きをするので、予約語functionが使われます。 もし、プロシージャが、sub型、function型の2つではなく、1種類しか無かったら、きっとprocedure~end procedureになっていたでしょう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 初歩的な質問なのですが、サブルーチン、プロシージャについて

    初めてプログラミングを行おうと思っています。 そこで、VBを使って行おうと思っているのですが、 全てが初めてなので、まずは本を読んでいるところです。 本の中で、サブルーチンやプロシージャという言葉がよく出てくるのですが、サブルーチンは処理のかたまり、プロシージャは処理の命令と軽く考えていたのですが、本の中に、『サブルーチンにはFunctionプロシージャとSubプロシージャの2種類がある』と書いてあり、それ以来、私にはサブルーチンもプロシージャも同じものに思えてしまいます。人に聞いたところ、『全然別ものだよ』という答えしかありませんでした。これは、どう違うのでしょうか?? また、SubプロシージャのSubはサブルーチンを示すとあり、益々、理解できなくなりました。 恐れ入りますが、サブルーチン、プロシージャ、Functionプロシージャ、Subプロシージャとは何かについて、おわかりの方がいらっしゃいましたらご教授ください。 宜しくお願い致します。

  • subプロシージャーですか?subステートメン

    ---------------- Sub test() End Sub ---------------- は、subプロシージャーですか?subステートメントですか? 上記のコードの「Sub」にカーソルをあて、F1を押すとヘルプが立ち上がり「Sub ステートメント」と表示されますが、 挿入(I)→プロシージャー(P)を見ると画像のように「Subプロシージャー」となっています。 どちらが正しいのでしょうか? どちらも正しいのでしょうか?

  • プロシージャが大きすぎます!

    Excel2000のVBAでフィルターオプションの連続操作をマクロで作成しているのですが、60回以上フィルターオプションを実行できるように記述したのですが、 長すぎてしまい、マクロを実行すると 「プロシージャが大きすぎます」と表示され実行できなくなります。ヘルプやHPを参考にして調べてみると、プロシージャを短くすればよいことはわかったのですが、SUBでプロシージャを短くし、その後、そのSUBで区切ったものを連続実行するためにはどのようにすればよいのでしょうか? VBAを勉強したばかりで、見当違いの質問かもしれませんが、補足いたしますので、よろしくお願いいたします。

  • Subステートメント と Subプロシージャ の違いは?

    Subステートメント と Subプロシージャ は何が違うのですか? 例えば Sub test() MsgBox "a" End Sub これは、 Subステートメントですか? Subプロシージャですか?

  • プロシージャとは

    お世話になっております。 プログラミングの際に(Cに限らず)プロシージャという言葉をよく目にします。が意味が良く分からず困っておりま。 このプロシージャ、という言葉はC言語で言うと具体的にはどのようなものをさしているのでしょうか。 書物、WEB等いろいろと検索をしたのですが、 サブルーチンのようなものかな? という理解しか出来ませんでした。 しかし、サブルーチンでしたらサブルーチンと言えば良い訳ですし、プロシージャなどという言葉は必要無いはずです。 恐れ入りますが、プロシージャとは何かについて、おわかりの方がいらっしゃいましたらご教授ください。 宜しくお願い致します。

  • 【VBA】SUBプロシージャーは標準モジュール以外に書いてもいい?

    ThisWorkbookのコードを書く場所や Sheetのイベントプロシージャーが実行されるところに Sub test() MsgBox "あああ" End Sub と書いて実行するとメッセージボックスが表示されます。 クラスモジュールとフォームのイベントプロシージャーを書くところではできませんでした。 ということはSUBプロシージャーは 標準モジュールでなくてもいいのでしょうか?

  • RunMacroメソッドではsubプロシージャーは呼び出せない?

    RunMacroメソッドはvbaのsubプロシージャーのマクロ1を呼び出すことはできないのでしょうか? DoCmd.RunMacro "マクロ1", 2 とするとエラーになってしまいます。 どうしても2回マクロを実行したい場合は Call マクロ1 Call マクロ1 とするしかないですか?

  • マクロ subプロシージャーは指定できない?

    accessのマクロの アクション:プロシージャの実行 は、 subプロシージャーは指定できないのでしょうか? 標準モジュールに Sub test1() MsgBox "プロシージャーの実行のテストです" End Sub Function test2() MsgBox "プロシージャーの実行のテストです" End Function と作り、 マクロのプロシージャの実行で プロシージャ名をtest2()にすると、うまく表示されますが、 test1()だと、失敗します。 subプロシージャーをマクロで呼び出す方法を教えてください。

  • VBAのイベントプロシージャについて

    VBAのイベントプロシージャについて VBAを勉強していますが、どうしても上手くいかないので質問させて頂ます。  ------------   Bookの中身    sheet1     A1:AA     A2:  ------------  【処理内容】  sheet1のA1には、AAという文字があり、ハイパーリンクが設定してあります。  sheet1のA1をクリックすると、sheet2が開かれます。 sheet2をを開くとsheet1のA2には、1を挿入するという処理を行いたい。  Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)      :  End Sub  を使用しましたが、上手くいきません。  ご教授の程、お願いします。  

  • VBAのプロシージャのことで

    TEST1のプロシージャ内に使用している readfileという変数の中にテストという文字列を代入し、 文字列が代入された状態で Callによって別のプロシージャを読みにいったとき TEST(変数)に入った文字列ごと持っていくには どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。 ----------------------------------------------------------- Sub TEST () Dim readfile As String readfile = "テスト" Call TEST2 End Sub ----------------------------------------------------------- Sub TEST2() readfile ←テストという文字列をTESTプロシージャから持ってきたい End Sub ----------------------------------------------------------- 単純に書いてみたコードですが、この様なことは可能なのでしょうか? すいませんがいただけないでしょうか><;