- ベストアンサー
VBの引数について
未経験で、コーディングをして、2ヶ月程で、笑われそうな 質問ですが、callステートメントに関する引数の考え方がさっぱりです。 そもそも、引数とは?参考書読んでも、解りませんでした。 あんまり、難しいことはわかりませんが、よろしくどーぞ。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
回答送れてごめんなさい。 しばらく、ネットがつながらなかったもので・・・ 回答ですが、えーっと、大体そうです。 が、「sAは001で帰ってきて、sBは004で帰ってくる」ではなくて 「s01は001で帰ってきて、s02は004で帰ってくる」です。 ローカル変数はプロシージャ単位で考えましょう。 関数 FlKansuu 内では、 sA = "003" sB = "004" のコーディングあとはこの関数が終わるまでは 「sA は "003" sB は "004"」です。 関数から戻った時の call側の引数の変数の値が 変化するByRef 変化しないのがByVal です。 細かいかも知れませんが後々混乱しますよ。 これが理解できたら次は、Sub と Function の違い使い方や Optionalの使用など理解したらかなりいいかんじだと思います。 がんばってください
その他の回答 (3)
- msystem
- ベストアンサー率42% (79/186)
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通りの記述方法で、両方に対応することができます。
お礼
最後の2行がよくわかりませんでしたが、 もう少し、かんがえてみたいです。 ありがとうございます。
- Hk2001
- ベストアンサー率48% (24/49)
コーディング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
お礼
詳しい内容ありがとうございます。 ByVal、ByRefの違いも聞きたかったのですが、そこまで教えて頂いて、 助かります。 あと、ちょっと、参考プログラムの解説をしてもらいたいです。 sAは001で帰ってきて、sBは004で帰ってくる。 でいいんですかね?混乱中。 すいませんが、お願いします。
- kougasha
- ベストアンサー率32% (34/105)
Call Shell(AppName, 1) というステートメントがあった時、 AppNameという変数、および1という定数が引数です。 Callで呼び出すSubもしくはFunctionに渡すパラメータ のことなのですが...。 言葉だけの問題でしょうね。
お礼
言葉の定義ぐらいなら、解るんですが...。 内容(意味)が解りません。
お礼
なんども、すいませんが、 別の言い方をすると、sAに001を渡し、sBに004を渡す。 という、考えはあっているでしょうか。