OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBの引数について

  • すぐに回答を!
  • 質問No.122612
  • 閲覧数98
  • ありがとう数5
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 82% (38/46)

未経験で、コーディングをして、2ヶ月程で、笑われそうな
質問ですが、callステートメントに関する引数の考え方がさっぱりです。
そもそも、引数とは?参考書読んでも、解りませんでした。
あんまり、難しいことはわかりませんが、よろしくどーぞ。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル9

ベストアンサー率 48% (24/49)

回答送れてごめんなさい。
しばらく、ネットがつながらなかったもので・・・

回答ですが、えーっと、大体そうです。
が、「sAは001で帰ってきて、sBは004で帰ってくる」ではなくて
「s01は001で帰ってきて、s02は004で帰ってくる」です。

ローカル変数はプロシージャ単位で考えましょう。
関数 FlKansuu 内では、
sA = "003"
sB = "004"
のコーディングあとはこの関数が終わるまでは
「sA は "003" sB は "004"」です。
関数から戻った時の
call側の引数の変数の値が
変化するByRef
変化しないのがByVal です。
細かいかも知れませんが後々混乱しますよ。

これが理解できたら次は、Sub と Function の違い使い方や
Optionalの使用など理解したらかなりいいかんじだと思います。
がんばってください
お礼コメント
jiri

お礼率 82% (38/46)

なんども、すいませんが、
別の言い方をすると、sAに001を渡し、sBに004を渡す。
という、考えはあっているでしょうか。
投稿日時 - 2001-09-02 12:25:24
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル9

ベストアンサー率 32% (34/105)

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

というステートメントがあった時、
AppNameという変数、および1という定数が引数です。

Callで呼び出すSubもしくはFunctionに渡すパラメータ
のことなのですが...。
言葉だけの問題でしょうね。
お礼コメント
jiri

お礼率 82% (38/46)

言葉の定義ぐらいなら、解るんですが...。
内容(意味)が解りません。
投稿日時 - 2001-08-23 14:10:32
  • 回答No.2
レベル9

ベストアンサー率 48% (24/49)

コーディング2ヶ月ですか。 理論的に理解するには、ちとつらいですかね。 簡単に説明すると call 関数名(引数01,引数02) という感じで関数にデータを渡せます。 関数側では Function 関数名(引数A,引数B) End Function となり 引数Aに引数01のデータが 引数Bに引数02のデータが渡されます。 渡されるデータは、呼ぶ側(call側 ...続きを読む
コーディング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

お礼率 82% (38/46)

詳しい内容ありがとうございます。
ByVal、ByRefの違いも聞きたかったのですが、そこまで教えて頂いて、
助かります。
あと、ちょっと、参考プログラムの解説をしてもらいたいです。
sAは001で帰ってきて、sBは004で帰ってくる。
でいいんですかね?混乱中。
すいませんが、お願いします。
投稿日時 - 2001-08-23 14:18:55
  • 回答No.3
レベル10

ベストアンサー率 42% (79/186)

callステートメントを使うのは、プロシージャを使うときですよね。(Function、Subプロシージャ)これらの考え方は、数学の関数に近いと思います。 たとえば、変数AとBを与えて、その平均Cを出す計算をさせたいとします。そうすると、 C=(A+B)/2 と記述しますよね。 これを毎回書くのは大変なので(この場合は短いのでたいしたことはないですが)、次のように書くことにします。 C=Hei ...続きを読む
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

お礼率 82% (38/46)

最後の2行がよくわかりませんでしたが、
もう少し、かんがえてみたいです。
ありがとうございます。
投稿日時 - 2001-09-02 12:19:02
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ