VBAのParamArrayで可変長の引数を受け取る方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

ParamArrayの概要

可変長引数 VBAの予約語

ParamArray

概要 ParamArray は、VBAのプロシージャ(Sub や Function)で可変長の引数(任意の数の引数)を受け取るために使用されます。

わかりやすく説明 ParamArray は、「引数の数が決まっていなくてもOK!」という命令です。関数にいくつでも値を渡せるようになります。

  • 可変長引数を受け取るための配列として機能する。
  • 配列として渡されるため、For EachUBound を使って処理できる。
  • 引数は Variant 型の配列として受け取られる。
  • 必ず最後の引数として定義する必要がある。

ParamArrayの基本的な使い方

ParamArray を使って、渡されたすべての引数をメッセージボックスに表示する例です。

Sub ShowValues(ParamArray values() As Variant)
    Dim v As Variant
    Dim result As String
    result = "受け取った値: " & vbCrLf
    
    For Each v In values
        result = result & v & vbCrLf
    Next v
    
    MsgBox result, vbInformation, "ParamArrayの例"
End Sub

' 実行例
Sub TestShowValues()
    ShowValues "A", "B", "C", 100, 200
End Sub

解説:

  • 可変長の引数を ParamArray values() で受け取る。
  • 配列として処理するため、For Each を使ってすべての値を出力。
  • 異なるデータ型(文字列や数値)を渡せる。

ExcelでのParamArrayの活用例(合計値を求める)

Excelで、複数の数値を受け取って合計を計算する関数を作成する例です。

Function SumValues(ParamArray numbers() As Variant) As Double
    Dim total As Double
    Dim num As Variant
    
    total = 0
    For Each num In numbers
        If IsNumeric(num) Then
            total = total + num
        End If
    Next num
    
    SumValues = total
End Function

' 実行例(セルに =SumValues(10, 20, 30) と入力)

解説:

  • 関数に可変長の引数を受け取り、すべての数値を合計。
  • 数値でない場合は無視する処理を追加。
  • Excelのセル関数として使用可能。

ParamArrayを使った文字列連結

ParamArray を使って、渡された複数の文字列を連結する関数を作成します。

Function JoinStrings(ParamArray words() As Variant) As String
    Dim result As String
    Dim word As Variant
    
    For Each word In words
        result = result & word & " "
    Next word
    
    JoinStrings = Trim(result)
End Function

' 実行例(セルに =JoinStrings("Hello", "VBA", "World") と入力)

解説:

  • 可変長の文字列引数を受け取り、それらを結合する。
  • 最後に Trim() を使い、不要なスペースを削除。

エラーを回避する方法

ParamArray を使う際に、数値以外が混じるとエラーになる可能性があるため、型チェックを行います。

Function SafeSumValues(ParamArray values() As Variant) As Double
    Dim total As Double
    Dim v As Variant
    
    total = 0
    On Error Resume Next
    
    For Each v In values
        If IsNumeric(v) Then
            total = total + v
        End If
    Next v
    
    If Err.Number <> 0 Then
        MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
    End If
    
    SafeSumValues = total
End Function

解説:

  • 数値以外のデータが混ざった場合にエラーを回避する。
  • IsNumeric() を使って型チェックを行う。
  • On Error Resume Next で処理が止まらないようにする。

ParamArrayの注意事項

  • ParamArray は最後の引数として定義する必要がある。
  • 受け取るデータ型は Variant で固定: すべてのデータがVariant型の配列として扱われる。
  • 配列として処理する: For EachUBound() を使うと便利。

よくある質問

Q: ParamArray の引数は何個まで渡せますか?
A: VBAの仕様上、最大 65535 個 まで渡せますが、実用上はメモリの制約を考慮してください。
Q: ParamArray に配列を渡せますか?
A: いいえ。ParamArray は個々の値を可変長引数として受け取るため、配列を直接渡すことはできません。
Q: ParamArray は Sub でも使えますか?
A: はい。Function だけでなく、Sub でも使用可能です。
Q: ParamArray のデータ型を指定できますか?
A: いいえ。ParamArray のデータ型は Variant型の配列 に固定されています。

まとめ

  • ParamArray を使うと、可変長の引数を受け取ることができる。
  • 渡されたデータは Variant型の配列 として処理される。
  • For EachUBound() を使ってループ処理が可能。
  • エラーハンドリングを行い、データ型のチェックを適切に行う。