カテゴリ: Excel VBA 更新日: 2026/02/22

Excel VBAの引数の使い方を基礎から理解しよう!ByValとByRefの違いも初心者向けに徹底解説

引数の使い方を基礎から理解しよう!ByVal/ByRefの違いも初心者向けに解説
引数の使い方を基礎から理解しよう!ByVal/ByRefの違いも初心者向けに解説

先生と生徒の会話形式で理解しよう

生徒

「Excel VBAの勉強を始めたんですが、引数って何のことかよく分からなくて……」

先生

「引数は、プロシージャや関数に情報を渡すための仕組みです。VBAではとても重要な考え方ですよ」

生徒

「ByValとかByRefも出てきて、さらに混乱しました」

先生

「では、Excel VBA初心者でも安心して理解できるように、基礎から順番に説明していきましょう」

1. 引数とは何か

1. 引数とは何か
1. 引数とは何か

Excel VBAにおける引数とは、SubプロシージャやFunctionプロシージャに渡す情報のことです。 とても難しそうに聞こえますが、実はとても身近な考え方です。 例えば、宅配便を送るときに「宛先」や「荷物」を渡しますが、VBAの引数もそれと同じです。 処理に必要な情報を事前に渡すことで、同じ処理でも内容を変えられるようになります。

2. 引数を使わない場合のSub

2. 引数を使わない場合のSub
2. 引数を使わない場合のSub

まずは引数を使わない場合を見てみましょう。 このSubは、実行すると必ず同じメッセージを表示します。 内容を変えたい場合は、コードを書き換える必要があります。


Sub Hello()
    MsgBox "こんにちは"
End Sub

こんにちは

3. 引数を使うと何が便利なのか

3. 引数を使うと何が便利なのか
3. 引数を使うと何が便利なのか

引数を使うと、処理の中身を変えずに結果だけを変えられます。 同じ箱に違う中身を入れるイメージです。 Excel VBAでは、この仕組みを使うことで、使い回しができるコードを書けるようになります。


Sub Greet(userName As String)
    MsgBox userName & "さん、こんにちは"
End Sub

山田さん、こんにちは

4. ByValとは何か

4. ByValとは何か
4. ByValとは何か

ByValは、「値渡し」と呼ばれる仕組みです。 引数で渡した値のコピーを使って処理を行います。 元の値には影響を与えません。 紙に書いたメモをコピーして渡すようなイメージです。


Sub SampleByVal(ByVal num As Integer)
    num = num + 10
    MsgBox num
End Sub

5. ByRefとは何か

5. ByRefとは何か
5. ByRefとは何か

ByRefは、「参照渡し」と呼ばれます。 元のデータそのものを渡すため、SubやFunctionの中で変更すると、呼び出し元の値も変わります。 同じノートを共有して書き換えるようなイメージです。 VBAでは、ByRefが省略された場合の初期設定になります。


Sub SampleByRef(ByRef num As Integer)
    num = num + 10
End Sub

6. ByValとByRefの違いを実際に確認

6. ByValとByRefの違いを実際に確認
6. ByValとByRefの違いを実際に確認

言葉だけでは分かりにくいので、実際の動きを見てみましょう。 同じ変数を使っても、ByValとByRefでは結果が変わります。 Excel VBA初心者が最初につまずきやすいポイントなので、しっかり確認することが大切です。


Sub CheckDifference()
    Dim value As Integer
    value = 5

    SampleByVal value
    MsgBox "ByVal後の値:" & value

    SampleByRef value
    MsgBox "ByRef後の値:" & value
End Sub

ByVal後の値:5
ByRef後の値:15

7. Functionでも引数は使える

7. Functionでも引数は使える
7. Functionでも引数は使える

Functionプロシージャでも引数はよく使われます。 計算に必要な値を受け取り、その結果を返します。 Excel VBAで関数を自作するときの基本的な形です。


Function DoubleNumber(ByVal num As Integer) As Integer
    DoubleNumber = num * 2
End Function

8. 引数を使うとコードが整理される理由

8. 引数を使うとコードが整理される理由
8. 引数を使うとコードが整理される理由

引数を使うことで、処理を部品のように分けられます。 同じ処理を何度も書く必要がなくなり、修正も一か所で済みます。 Excel VBAのプロシージャ設計では、引数を上手に使うことがとても重要です。 初心者のうちからこの考え方に慣れておくと、後でとても楽になります。

カテゴリの一覧へ
新着記事
New1
Excel VBA
Excel VBAで業務自動化!初心者でもわかる定型作業の自動化例
New2
Excel VBA
VBAの基本構造を理解しよう!モジュール・プロシージャ・関数の役割まとめ
New3
Office Scripts
Office Scriptsで大量シートを効率管理!Excelワークブック最適構造と自動化テクニック
New4
Excel VBA
Excel VBAが今でも使われ続ける理由とは?現場で評価されるポイントを徹底解説
人気記事
No.1
Java&Spring記事人気No1
Office Scripts
Office Scriptsで別ブックを開いてデータ取得する方法|OneDrive・SharePoint連携でExcel自動化
No.2
Java&Spring記事人気No2
Excel VBA
Excel VBA参照設定エラー「参照が見つかりません」を完全解説!初心者でも原因と対処法がわかる
No.3
Java&Spring記事人気No3
Excel VBA
Excel VBAは今後なくなる?将来性と企業での活用状況を詳しく解説
No.4
Java&Spring記事人気No4
Excel VBA
Excel VBAの開発環境を最速で整える!VBEの開き方から基本操作まで完全ガイド
No.5
Java&Spring記事人気No5
Excel VBA
Excel VBAモジュール共有術!複数のブックでマクロを使い回す最適構成
No.6
Java&Spring記事人気No6
Excel VBA
Excel VBAで列の追加・行の削除を自動化!InsertとDeleteの使い方を初心者向けに徹底解説
No.7
Java&Spring記事人気No7
Excel VBA
個人用マクロブック(PERSONAL.XLSB)で作る最強の共通ライブラリ化ガイド
No.8
Java&Spring記事人気No8
Excel VBA
VBAのコメントの書き方を完全ガイド!初心者でもわかる説明文の付け方