INDEX
ParamArrayの概要
可変長引数 VBAの予約語 | ||
ParamArray 概要 ParamArray は、VBAのプロシージャ(Sub や Function)で可変長の引数(任意の数の引数)を受け取るために使用されます。 わかりやすく説明 ParamArray は、「引数の数が決まっていなくてもOK!」という命令です。関数にいくつでも値を渡せるようになります。 |
||
|
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 Each
やUBound()
を使うと便利。
よくある質問
- Q: ParamArray の引数は何個まで渡せますか?
- A: VBAの仕様上、最大 65535 個 まで渡せますが、実用上はメモリの制約を考慮してください。
- Q: ParamArray に配列を渡せますか?
- A: いいえ。ParamArray は個々の値を可変長引数として受け取るため、配列を直接渡すことはできません。
- Q: ParamArray は Sub でも使えますか?
- A: はい。Function だけでなく、Sub でも使用可能です。
- Q: ParamArray のデータ型を指定できますか?
- A: いいえ。ParamArray のデータ型は Variant型の配列 に固定されています。
まとめ
- ParamArray を使うと、可変長の引数を受け取ることができる。
- 渡されたデータは Variant型の配列 として処理される。
For Each
やUBound()
を使ってループ処理が可能。- エラーハンドリングを行い、データ型のチェックを適切に行う。