none
ByRefの使い方 RRS feed

  • 質問

  • VB6、またはVB5でも、次の様な結果になるんでしょうか?

    実行環境がないので教えてください。

     

    Sub Button1_Click()
        Dim i1 As Integer
        Dim i2 As Integer
        Dim i3 As Integer
        Dim i4 As Integer
        Dim i5 As Integer
        Dim i6 As Integer
        i1 = 0
        i2 = 0
        i3 = 0
        i4 = 0
        i5 = 0
        i6 = 0
        mysub i1        '(1)
        mysub (i2)      '(2)
        Call mysub(i3)  '(3)
        myfunc i4       '(4)
        myfunc (i5)     '(5)
        Call myfunc(i6) '(6)
    End Sub

    Sub mysub(ByRef arg As Integer)
        arg = 1
    End Sub

    Function myfunc(ByRef arg As Integer)
        arg = 1
    End Function

     

    値「1」になる:i1, i3, i4, i6

    値「0」のまま:i2, i5

     

    i2とi5は何故「1」にならないのでしょう?

    これって何の法則です?

     

    ご教授願います。

     

    ちなみに、こちらは

    WinXP

    Excel2000 VBA

    での結果です。

     

    2008年9月14日 14:29

回答

すべての返信

  • (2),(5)での括弧はSubやFunctionの引数を与えるための括弧ではなく、演算の括弧と評価されるためです。
    括弧内の「演算の結果」が参照渡しされており、演算の元になったi2,i5が渡されているでは無いのです。
    値型ではわかりにくいですが、参照型で(2)(5)のような書き方をするとエラーになります。
    2008年9月14日 16:04
  • こんにちは。

     

    こういうコードで試すと一目瞭然であります。

    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28458&forum=7&start=21

    2008年9月15日 1:19
  • こんにちは。中川俊輔 です。

     

    gekkaさん、じゃんぬねっとさん、回答ありがとうございます。

     

    @ぶるーのさん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?

    有用な情報と思われたため、

    gekkaさん、じゃんぬねっとさんの回答へ回答チェックをつけさせていただきました。

     

    今後ともフォーラムをよろしくお願いします。

     

    それでは!

     

    2008年9月26日 4:57