大体でIT
大体でIT
Excel VBAの「Sub」で「引数」を使うには、「()」に変数を入力することでできます。変数の渡し方には「参照渡し」と「値渡し」があります。渡した変数を引き継ぎたい場合には「参照渡し」で、変数を渡しっぱなしにしたい場合は「値渡し」を使いましょう。
この記事では、Subで引数を使う方法について、ご紹介します。
引数を使うには「()」の中に変数を入力することでできます。
変数を渡す方法には、「参照渡し」と「値渡し」があります。
- 「参照渡し」:渡した変数を引き継げる
- 「値渡し」:変数は渡しっぱなし
基本的に「値渡し」を使って、変数を引き継ぎたい場合だけ「参照渡し」を使うと予期せぬ事態が起こりづらいです。
では、Subで引数を使う方法について、解説していきます。
Subで引数を使うには、「()」に変数を入力して使います。
Sub TEST1()
Call TEST2(1)
End Sub
Sub TEST2(a)
MsgBox a + 1
End Sub
「()」の中に変数を入力する
「1」を渡して、参照先で1を足すので結果は「2」となります。
Subで引数を使えた
変数の渡し方には、「参照渡し」と「値渡し」があります
- 「参照渡し」:渡した変数を引き継げる
- 「値渡し」:変数は渡しっぱなし
「参照渡し」のイメージ
「値渡し」のイメージ
「ByRef」をつけて渡すと、「参照渡し」になります。
「ByRef」をつけると「参照渡し」
Sub TEST1()
a = 1
Call TEST2(a)
MsgBox a
End Sub
Sub TEST2(ByRef b)
b = b + 1
End Sub
「ByRef」をつけているので「参照渡し」となります。
参照渡しなので、渡した変数を引き継ぐことができます。
「1」を渡して「1」を足した変数が引き継がれて、結果は「2」となります。
「ByRef」は省略できる
Sub TEST1()
a = 1
Call TEST2(a)
MsgBox a
End Sub
Sub TEST2(b)
b = b + 1
End Sub
なにも記述しない場合は「ByRef」となるので、「ByRef」は省略することもできます。
結果は先ほどと同じで変数が引き継がれて、「2」となります。
「ByVal」をつけると「値渡し」
Sub TEST1()
a = 1
Call TEST2(a)
MsgBox a
End Sub
Sub TEST2(ByVal b)
b = b + 1
End Sub
渡した変数は引き継がれない
「値渡し」なので、渡した変数は引き継がれないです。
基本的には値渡し「ByVal」を使った方が、間違いが起こりにくいです。
とりあえず参照渡しを使って、間違って変数に値を入力しちゃった場合で、考えてみます。
間違って変数を入力しちゃった
Sub TEST1()
a = 1
Call TEST2(a)
End Sub
Sub TEST2(b)
b = b + 1
MsgBox b
b = 9999
End Sub
出力した値は問題なし
ただ、引き継がれた変数は「9999」となるので、予期しない事態になってしまう可能性があります。
引き継がれた値が「9999」となって思わぬ事態に
これに気づかないままだと、予期せぬ事態になりかねません。
変数を「引き継ぎたい」場合だけ「参照渡し」
変数を意図的に「引き継ぎたい」場合だけ「参照渡し」とするといいです。
仮に間違って入力しても参照元の変数に影響がないので、予期せぬ事態が発生する可能性が減ります。
この記事では、Subで引数を使う方法について、ご紹介しました。
引数を使うには「()」の中に変数を入力することでできます。
変数を渡す方法には、「参照渡し」と「値渡し」があります。
- 「参照渡し」:渡した変数を引き継げる
- 「値渡し」:変数は渡しっぱなし
基本的に「値渡し」を使って、変数を引き継ぎたい場合だけ「参照渡し」を使うと予期せぬ事態が起こりづらいです。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。