大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAの「Sub」で「引数」を使うには、「()」に変数を入力することでできます。変数の渡し方には「参照渡し」と「値渡し」があります。渡した変数を引き継ぎたい場合には「参照渡し」で、変数を渡しっぱなしにしたい場合は「値渡し」を使いましょう。

はじめに

この記事では、Subで引数を使う方法について、ご紹介します。

引数を使うには「()」の中に変数を入力することでできます。

変数を渡す方法には、「参照渡し」と「値渡し」があります。

  • 「参照渡し」:渡した変数を引き継げる
  • 「値渡し」:変数は渡しっぱなし

という違いがあります。

基本的に「値渡し」を使って、変数を引き継ぎたい場合だけ「参照渡し」を使うと予期せぬ事態が起こりづらいです。

では、Subで引数を使う方法について、解説していきます。

この記事で紹介すること

  • Subで「引数」を使う方法

目次

Subで引数を使う

Subで引数を使うには、「()」に変数を入力して使います。

「()」に変数を入力して使う

「()」に変数を入力して使うってみます。

VBAコードは、こんな感じです。

Sub TEST1()
    Call TEST2(1)
End Sub

Sub TEST2(a)    
    MsgBox a + 1
End Sub

「()」の中に変数を入力して渡します。

「()」の中に変数を入力する

「()」の中に変数を入力して渡します

「1」を渡して、参照先で1を足すので結果は「2」となります。

Subで引数を使えた

「1」を渡して、参照先で1を足すので結果は「2」となりました

こんな感じで引数を使うことができます。

参照渡しと値渡しがある

変数の渡し方には、「参照渡し」と「値渡し」があります

イメージ

違いとしては、

  • 「参照渡し」:渡した変数を引き継げる
  • 「値渡し」:変数は渡しっぱなし

という感じです。

参照渡しは、渡した変数を引き継ぐことができます。

「参照渡し」のイメージ

参照渡しは、渡した変数を引き継ぐことができます

値渡しは、変数を渡しっぱなしにします。

「値渡し」のイメージ

値渡しは、変数を渡しっぱなしにします

という感じです。

それぞれの方法で実行してみましょう。

参照渡しを使う(ByRefもしくは省略)

「ByRef」をつけて渡すと、「参照渡し」になります。

「ByRef」をつけると「参照渡し」

「ByRef」をつけて変数を渡してみます。

Sub TEST1()
    a = 1
    Call TEST2(a)
    MsgBox a
End Sub

Sub TEST2(ByRef b)    
    b = b + 1
End Sub

「ByRef」をつけているので「参照渡し」となります。

「ByRef」をつけて渡すと「参照渡し」となります

参照渡しなので、渡した変数を引き継ぐことができます。

参照渡しなので、渡した変数を引き継ぐことができます

「1」を渡して「1」を足した変数が引き継がれて、結果は「2」となります。

「1」を渡して「1」を足した変数が引き継がれて、結果は「2」となりました

結果は、「2」となりました。

渡した変数が引き継がれています。

「ByRef」は省略できる

「ByRef」を省略することができます。

Sub TEST1()
    a = 1
    Call TEST2(a)
    MsgBox a
End Sub

Sub TEST2(b)    
    b = b + 1
End Sub

なにも記述しない場合は「ByRef」となるので、「ByRef」は省略することもできます。

なにも記述しない場合は「ByRef」となるので、「ByRef」は省略することもできます

結果は先ほどと同じで変数が引き継がれて、「2」となります。

結果は先ほどと同じで変数が引き継がれて、「2」となりました

「2」となりました。

変数が引き継がれていますね。

値渡しを使う(ByVal)

「ByVal」を使うと、「値渡し」になります。

「ByVal」をつけると「値渡し」

「ByVal」をつけてみます。

Sub TEST1()    
    a = 1
    Call TEST2(a)
    MsgBox a
End Sub

Sub TEST2(ByVal b)    
    b = b + 1
End Sub

「ByVal」をつけて渡すと「値渡し」です。

「ByVal」をつけて渡すと「値渡し」となります

実行してみます。

渡した変数は引き継がれない

「値渡し」なので、渡した変数は引き継がれないです。

「値渡し」なので、渡した変数は引き継がれないです

結果は、元の変数のままで「1」となります。

結果は、元の変数のままで「1」となりました

結果は、「1」のままです。

「値渡し」は変数を渡しっぱなしにします。

どちらを使うか

基本的には値渡し「ByVal」を使った方が、間違いが起こりにくいです。

基本的には値渡し「ByVal」を使う

とりあえず参照渡しを使って、間違って変数に値を入力しちゃった場合で、考えてみます。

間違って変数を入力しちゃった

Sub TEST1()    
    a = 1
    Call TEST2(a)
End Sub

Sub TEST2(b)    
    b = b + 1
    MsgBox b
    b = 9999
End Sub

一番下にうっかり入力という感じです。

とりあえず参照渡しを使って、間違って変数に値を入力しちゃった場合です

結果は想定していた「2」となります。

出力した値は問題なし

結果は想定していた「2」となりました

ただ、引き継がれた変数は「9999」となるので、予期しない事態になってしまう可能性があります。

引き継がれた値が「9999」となって思わぬ事態に

ただ、引き継がれた変数は「9999」となるので、予期しない事態になってしまう可能性があります

引き継がれた値は「9999」となっています。

これに気づかないままだと、予期せぬ事態になりかねません。

変数を「引き継ぎたい」場合だけ「参照渡し」

変数を意図的に「引き継ぎたい」場合だけ「参照渡し」とするといいです。

仮に間違って入力しても参照元の変数に影響がないので、予期せぬ事態が発生する可能性が減ります。

おわりに

この記事では、Subで引数を使う方法について、ご紹介しました。

引数を使うには「()」の中に変数を入力することでできます。

変数を渡す方法には、「参照渡し」と「値渡し」があります。

  • 「参照渡し」:渡した変数を引き継げる
  • 「値渡し」:変数は渡しっぱなし

という違いがあります。

基本的に「値渡し」を使って、変数を引き継ぎたい場合だけ「参照渡し」を使うと予期せぬ事態が起こりづらいです。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す