• ベストアンサー

VBの引数について

未経験で、コーディングをして、2ヶ月程で、笑われそうな 質問ですが、callステートメントに関する引数の考え方がさっぱりです。 そもそも、引数とは?参考書読んでも、解りませんでした。 あんまり、難しいことはわかりませんが、よろしくどーぞ。

  • jiri
  • お礼率82% (38/46)

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

  • ベストアンサー
  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.4

回答送れてごめんなさい。 しばらく、ネットがつながらなかったもので・・・ 回答ですが、えーっと、大体そうです。 が、「sAは001で帰ってきて、sBは004で帰ってくる」ではなくて 「s01は001で帰ってきて、s02は004で帰ってくる」です。 ローカル変数はプロシージャ単位で考えましょう。 関数 FlKansuu 内では、 sA = "003" sB = "004" のコーディングあとはこの関数が終わるまでは 「sA は "003" sB は "004"」です。 関数から戻った時の call側の引数の変数の値が 変化するByRef 変化しないのがByVal です。 細かいかも知れませんが後々混乱しますよ。 これが理解できたら次は、Sub と Function の違い使い方や Optionalの使用など理解したらかなりいいかんじだと思います。 がんばってください

jiri
質問者

お礼

なんども、すいませんが、 別の言い方をすると、sAに001を渡し、sBに004を渡す。 という、考えはあっているでしょうか。

その他の回答 (3)

  • msystem
  • ベストアンサー率42% (79/186)
回答No.3

callステートメントを使うのは、プロシージャを使うときですよね。(Function、Subプロシージャ)これらの考え方は、数学の関数に近いと思います。 たとえば、変数AとBを与えて、その平均Cを出す計算をさせたいとします。そうすると、 C=(A+B)/2 と記述しますよね。 これを毎回書くのは大変なので(この場合は短いのでたいしたことはないですが)、次のように書くことにします。 C=Heikin(A,B) ただし、Heikin(A,B)=(A+B)/2 ここで、「C=・・・」の部分が呼び出しCallステートメント、「ただし・・・」の部分がプロシージャになります。今回は計算ですが、プログラムでは、計算に限らず、いろいろな処理を書くことができます。 この、A、Bのことを引数といいます。つまり、そのプロシージャの中で処理するために必要なデータということになります。 ただ、この場合は、計算の結果がほしいのでC=・・・の記述になりますが、結果はいらない処理の場合、VBではCallステートメントを使うという決まりがあります。 上記の場合、結果がほしいときは、 C=Heikin(A,B) と記述し、結果がいらないときは、 Call Heikin(A,B) または Heikin A,B と記述することになります。 ちなみに、Subプロシージャは、結果を返さないプロシージャ、Functionプロシージャは、上記の2通りの記述方法で、両方に対応することができます。

jiri
質問者

お礼

最後の2行がよくわかりませんでしたが、 もう少し、かんがえてみたいです。 ありがとうございます。

  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.2

コーディング2ヶ月ですか。 理論的に理解するには、ちとつらいですかね。 簡単に説明すると call 関数名(引数01,引数02) という感じで関数にデータを渡せます。 関数側では Function 関数名(引数A,引数B) End Function となり 引数Aに引数01のデータが 引数Bに引数02のデータが渡されます。 渡されるデータは、呼ぶ側(call側)の引数と呼ばれる側(Sub,Function)の引数の順番で決まります。 つまり関数側の引数の順番を変えると渡されるデータも変わります。 Function 関数名(引数B,引数A) End Function 引数Bに引数01のデータが 引数Aに引数02のデータが渡されます。 大体こんな感じです。 あともうひとつ値渡し(ByVal)と参照渡し(ByRef)があります。 これは、データを渡された側(関数側)で渡されたデータを変更したとき、 Call側の引数の変数が変化するかどうかということです。 少し難しいかもしれませんが、簡単にいうと 値渡し(ByVal)は、変化しない 参照渡し(ByRef)は、変化する です。 宣言のしかたは Function 関数名(ByVal 引数A , ByRef 引数B ) End Function 引数A = 値渡し(ByVal) 引数B = 参照渡し(ByRef) になり、関数のなかでそれぞれ、引数のデータを変更すると call側に戻ったときに引数01,引数02のデータを比べて見てください。 ひとつ理解するとヘルプを再度見たときに新たに理解できることがありますよ。 ヘルプは、結構使えるので、ぜひおぼえてください。 参考プログラムです。 Private Sub Form_Load() Dim s01 As String Dim s02 As String s01 = "001" s02 = "002" Call FlKansuu(s01, s02) 'イミディエトウィンドウに出力 Debug.Print "s01 " & s01 Debug.Print "s02 " & s02 End Sub Sub FlKansuu(ByVal sA As String, ByRef sB As String) sA = "003" sB = "004" End Sub

jiri
質問者

お礼

詳しい内容ありがとうございます。 ByVal、ByRefの違いも聞きたかったのですが、そこまで教えて頂いて、 助かります。 あと、ちょっと、参考プログラムの解説をしてもらいたいです。 sAは001で帰ってきて、sBは004で帰ってくる。 でいいんですかね?混乱中。 すいませんが、お願いします。

  • kougasha
  • ベストアンサー率32% (34/105)
回答No.1

Call Shell(AppName, 1) というステートメントがあった時、 AppNameという変数、および1という定数が引数です。 Callで呼び出すSubもしくはFunctionに渡すパラメータ のことなのですが...。 言葉だけの問題でしょうね。

jiri
質問者

お礼

言葉の定義ぐらいなら、解るんですが...。 内容(意味)が解りません。

関連するQ&A

  • .NET VB の引数についてお伺いさせて下さい。

    最近、VBのコーティングを始めました。 ビルドを実行しても、エラーが出る訳ではないのですが、理解を深めたいので一つご教授していただければ、幸いです。^^ ファンクションの構文なんですが、 アクセス修飾子 Function 任意のファンクション名(第一引数,第二引数)… Private Function Func_Name (Byval sender As System.object, _ Byval e As System.EventArgs ) と記述している方はよくいらっしゃると思います。疑問なのは、第2引数の e です。この小文字には、意味があるのでしょうか? 引数名は自由であると思いますが、参考書などによくこの小文字が入っているのが、気になります。  どなたか、ご存知の方いらっしゃいましたら、お手数ですがご教授いただけませんでしょうか?^^;

  • プロシージャの引数について

    DB : SQL Server 2005 プロシージャの引数にCSVファイルのフルパスを入れたいのですが、 エラーが出て困っています。 http://questionbox.jp.msn.com/qa262720.html ↑の回答も参考にしましたが、どうしても出来ません。 最初は以下のように書いていました。 BULK INSERT IDATA from ''+ @pass + '' with ( fieldterminator = ',', rowterminator = '\n' ) このときは、プロシージャを作る段階で↓のエラーメッセージが出ました。 >メッセージ 1038、レベル 15、状態 1、プロシージャ sss、行 30 オブジェクト名または列名がないか、空です。SELECT INTO ステートメントの場合は、各列に名前が付いていることを確認してください。その他のステートメントの場合は、空の別名を検索してください。"" または [] で定義された別名は許可されません。別名として、名前または 1 つのスペースを追加してください。 >メッセージ 319、レベル 15、状態 1、プロシージャ sss、行 30 キーワード 'with' 付近に不適切な構文があります。このステートメントが共通テーブル式または xmlnamespaces 句の場合、前のステートメントをセミコロンで終了してください。 また、上記の回答を参考にしたところ、プロシージャは作成できましたが、 引数を与えて実行する段階で↓のエラーメッセージが出ました。 >メッセージ 203、レベル 16、状態 2、プロシージャ sss、行 32 名前 'BULK INSERT IDATA from '\\・・・\・・・\取込.csv' with ( fieldterminator = ',',rowterminator = '\n')' は有効な識別子ではありません。 引数で与えるのでなく、直接入力した場合は出来ます。 よろしくお願いします (><)

  • vb.net タイマーに引数を渡す

    vb.net(visual studio 2010)です。趣味(もちろん素人です。)でソフトを作ってます。timerに引数を渡すことはできるのでしょうか。integer型の引数を渡したいです。的外れな質問かもしれませんが、実現できたらうれしいです。よろしくお願いします。

  • 関数の引数にSTLを使う

    こんにちは。C++の勉強を最近始めました。 メンバ関数の引数に、STL(queue)を使おうとしています。 以下のように、参照にして使おうと思っています。 int test01::method(queue<int>& q) { return 0; } ですが、コンパイルしようとすると、 「識別子 'queue' がシンタックスエラーを起こしました。」 と言われてエラーになってしまいます・・・。 (他の箇所でqueueを使っていますが、そこではエラーは出ないので、 ヘッダファイルや名前空間はちゃんと指定できていると思います) STLに関する情報を集めてみたのですが、 引数にして使った例を見つけることができませんでした。 シンタックスエラーなので、文法や構文などが正しくないのだと思うのですが、 関数の引数にそもそもSTLを指定できないのか、 コーディングの仕方が間違っているのか、判断ができません。 どのようにしたら、引数に指定できるのでしょうか? ご存知の方がいらしたら、おしえていただきたいです。 よろしくおねがいします。

  • 多数の引数で初期化されるクラスの初期化について。

    C++のクラスについての質問なのですが、多数の引数によって初期化され、初期化されないうちは全てのメソッドは機能しないものとします。 このようなclassの初期化についていろいろ考えているのですが、 1,構造体を渡す、  この方法では派生クラスで初期化する場合など凄く難しいと思う。  派生先で動的に決定される場合など、基底クラスより初期化されてくるので、動的に作成した引数を渡せない。 2,初期化専用メソッドをつくり、それが渡されるまで全てのメソッドをブロックする。  初期化されるまでは全てのメソッドは機能しないのだからそのあたりのコーディングが複雑化する。 3,全てコンストラクタの引数に取る。  コンストラクタが非常に長くなる。  デフォルト引数を使えばある程度改善されますが、それでも最後の要素を書き換えたいときなどとても長くなる。 現在は3の方法でコーディングを行っているのですが、このようなクラスの初期化方法でいい方法はないのでしょうか?

  • C言語において、関数とその役割、また、引数とその役割、仮引数、実引数とは?

    C言語初心者です。 そもそもPC使うのも苦手ですがよろしくお願いします。 C言語において、関数とその役割、また、引数とその役割、仮引数、実引数の役割を、実例を用いて簡潔に説明していただけると助かります。お願いします。

  • 引数が全く分かりません。

    JavaScriptを勉強しているのですが「引数」という概念が理解出来ず心が折れそうです。分かりやすい言われている参考書やサイトの解説でも、全く意味が分かりません(値を渡すとかそのレベルで既に分かりませんが、returnで関数の結果が出ることまでは分かります)。 子供でも分かるくらい易しく教えていただけると嬉しいです。どうぞ宜しくお願いします。

  • 引数が正しくありません

    ソフトのダウンロードで「引数が正しくありません」と表示され、ダウンロードが始まりません。 引数とは? 解決策は? ※OKWAVEより補足:「「ScanSnap/fiシリーズ/HHKB」商品について」についての質問です。

  • 関数の引数って。。

    引数ってその関数の中だけに作用するもので、 そもそも変数とは違うものですよね? ////sample/////////// insuu = 100; function kansuu(insuu){ x = insuu; } kansuu(200); document.write(x); ////////////////////// のようにしたら、200と表示されて、エラーも出なかったわけですが、 引数と変数って無関係ってことですか?

  • 外部exeに対しての引数受け渡し

    お世話になります。 2点ほどVB.netのコーディングに関して質問があります。 環境:VB2008 DB:SQLSEVER A = アプリケーション1 B = アプリケーション2 複数の引数 = DB検索情報(key,テーブル名)&ヒットしたファイルが格納されているルートディレクトリ ●実装したい機能 Aから外部のB(exe)を呼び出し、Aから受け取った複数の引数を元にDBを検索しファイル名をヒットさせ、そのファイルを開く。 質問(1) Aから外部のB(exe)を呼び出すときにAで取得した複数の引数をBに渡す方法はどうするのでしょうか? 質問(2) 受け取った引数を元にDBを検索し、ヒットしたファイルを開きたいのですが、その複数の引数を格納する構文はどういったものになるのでしょうか? ネットで調べはしましたが、いまいちピンとくるものがなく質問した次第です。 最近VBを始めたもので、質問をする上で情報が欠如しているかもしれませんが、ご回答頂けると幸いです。 よろしくお願いします。

専門家に質問してみよう