Access VBAでシステム開発を続けていると、
- 同じような関数を何度も作っている
- 引数の数が処理ごとに異なる
- 共通処理をもっと柔軟にしたい
- ログ出力を汎用化したい
- Copilotが生成した関数を整理したい
といった課題に直面します。
結論から言うと、ParamArrayを活用することで可変長引数を持つ柔軟な関数を作成でき、共通化レベルを大幅に向上できます。
実務では利用頻度こそ高くありませんが、一度覚えるとログ出力やSQL生成、入力チェックなどで非常に便利な機能です。中級者以上を目指すAccess VBA開発者なら知っておきたいテクニックの一つです。
- ParamArrayとは
- なぜParamArrayが重要なのか
- 基本構文
- 逆引き① 可変長引数を受け取りたい
- 逆引き② ログ出力を共通化したい
- 逆引き③ エラーメッセージをまとめたい
- 逆引き④ SQL条件を動的生成したい
- 逆引き⑤ 必須チェックを共通化したい
- ParamArrayの正体
- 実務活用例① CSV取込ログ
- 実務活用例② 顧客検索
- 実務活用例③ 設備管理システム
- 実務活用例④ フォーム初期化
- 実務活用例⑤ デバッグ出力
- ベテラン開発者の定番パターン
- ParamArray利用時の注意点
- ParamArrayとCollectionの違い
- Copilot活用術① 共通関数作成
- Copilot活用術② 入力チェック共通化
- Copilot活用術③ コードレビュー
- ParamArrayが向いている処理
- 開発現場での利用頻度
- ParamArrayを覚えるメリット
- まとめ
ParamArrayとは
ParamArrayは、
引数の個数が変わる
↓
配列として受け取る
↓
共通処理する
ための機能です。
例えば、
Call Test("A")
も
Call Test("A", "B")
も
Call Test("A", "B", "C")
も同じ関数で受け取れます。
なぜParamArrayが重要なのか
通常の関数です。
Public Sub Test(strA As String, strB As String)
End Sub
呼び出し側は
Call Test("A", "B")
固定になります。
しかし実務では、
引数2個
引数3個
引数10個
が混在するケースがあります。
そこでParamArrayが役立ちます。
基本構文
Public Sub Test(ParamArray args())
Dim varItem As Variant
For Each varItem In args
Debug.Print varItem
Next
End Sub
逆引き① 可変長引数を受け取りたい
最も基本的な使い方です。
Public Sub ShowData(ParamArray args())
Dim varItem As Variant
For Each varItem In args
Debug.Print varItem
Next
End Sub
呼出し
Call ShowData("A")
Call ShowData("A","B")
Call ShowData("A","B","C")
結果
A
A
B
A
B
C
逆引き② ログ出力を共通化したい
実務向けです。
Public Sub WriteLog(ParamArray args())
Dim strLog As String
Dim varItem As Variant
For Each varItem In args
strLog = strLog & varItem & ","
Next
Debug.Print strLog
End Sub
呼出し
Call WriteLog("CSV取込", "開始")
出力
CSV取込,開始
逆引き③ エラーメッセージをまとめたい
エラー管理です。
Call WriteLog("エラー", Err.Number, Err.Description)
効果
エラー記録を共通化できます。
逆引き④ SQL条件を動的生成したい
検索画面向けです。
Call CreateWhere("顧客コード", "顧客名", "住所")
効果
検索条件が増減しても対応できます。
逆引き⑤ 必須チェックを共通化したい
入力チェックです。
Call CheckRequired("txtCode", "txtName", "txtAddress")
効果
チェック関数を共通化できます。
ParamArrayの正体
実は内部的には配列です。
件数取得
UBound(args)
例
Debug.Print UBound(args)
結果
2
になります。
実務活用例① CSV取込ログ
CSV管理システムです。
Call WriteLog("ImportCSV", strFileName, Now())
効果
ログ出力関数を一本化できます。
実務活用例② 顧客検索
検索条件追加です。
Call CreateFilter("顧客コード", "顧客名", "都道府県")
効果
拡張しやすくなります。
実務活用例③ 設備管理システム
チェック項目です。
Call CheckEquipment("設備番号", "点検日", "担当者")
効果
保守性が向上します。
実務活用例④ フォーム初期化
対象項目です。
Call ClearControl("txtA", "txtB", "txtC")
効果
柔軟な画面制御ができます。
実務活用例⑤ デバッグ出力
開発時に便利です。
Call DebugData(lngCount, strSQL, strFileName)
効果
調査コードを簡潔にできます。
ベテラン開発者の定番パターン
ログ関数です。
Public Sub WriteLog(ParamArray args())
Dim varItem As Variant
For Each varItem In args
Debug.Print varItem
Next
End Sub
呼出し
Call WriteLog("開始", Now())
汎用性が非常に高いです。
ParamArray利用時の注意点
Variantになる
受け取る値は
Variant
になります。
型チェックが必要
場合によっては
IsNumeric
などを利用します。
最後の引数でのみ使用可能
以下はエラーです。
Sub Test(ParamArray args(), strName As String)
正しくは
Sub Test(strName As String, ParamArray args())
です。
ParamArrayとCollectionの違い
初心者が迷うポイントです。
ParamArray
呼出時に渡す
Collection
処理中に蓄積する
用途が異なります。
Copilot活用術① 共通関数作成
Copilotへの依頼例です。
Access VBAです。
ParamArrayを利用して
ログ出力関数を
作成してください。
Copilot活用術② 入力チェック共通化
必須入力チェックを
ParamArrayで
共通化してください。
Copilot活用術③ コードレビュー
以下の関数を
ParamArrayで改善できるか
レビューしてください。
保守性改善に非常に役立ちます。
ParamArrayが向いている処理
特に活躍するのは次のような場面です。
- ログ出力
- 入力チェック
- SQL条件生成
- デバッグ出力
- 共通関数開発
- フォーム制御
開発現場での利用頻度
| 順位 | 用途 |
|---|---|
| 1位 | ログ出力 |
| 2位 | 入力チェック |
| 3位 | デバッグ処理 |
| 4位 | SQL生成 |
| 5位 | 共通モジュール |
利用頻度は高くありませんが、知っていると設計の幅が広がります。
ParamArrayを覚えるメリット
次のような効果があります。
- 共通化レベル向上
- 保守性向上
- コード量削減
- 再利用性向上
- Copilot生成コードの整理
特に中規模以上のシステム開発で効果を発揮します。
まとめ
ParamArrayはAccess VBAで柔軟な共通関数を実現するための便利な機能です。
特に
- ログ出力
- SQL生成
- フォーム制御
- 入力チェック
- デバッグ処理
などで活躍します。
またCopilotを活用することで、
- ParamArray対応関数生成
- 共通化設計
- コードレビュー
も効率良く実施できます。
初心者向けの機能ではありませんが、中級者・上級者を目指す方にはぜひ習得していただきたい実践テクニックです。


コメント