PR

Access VBAで同じ処理を何度も書かない方法|ParamArrayで柔軟な共通関数を作るテクニック

VBA

Access VBAでシステム開発を続けていると、

  • 同じような関数を何度も作っている
  • 引数の数が処理ごとに異なる
  • 共通処理をもっと柔軟にしたい
  • ログ出力を汎用化したい
  • Copilotが生成した関数を整理したい

といった課題に直面します。

結論から言うと、ParamArrayを活用することで可変長引数を持つ柔軟な関数を作成でき、共通化レベルを大幅に向上できます。

実務では利用頻度こそ高くありませんが、一度覚えるとログ出力やSQL生成、入力チェックなどで非常に便利な機能です。中級者以上を目指すAccess VBA開発者なら知っておきたいテクニックの一つです。


スポンサーリンク

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対応関数生成
  • 共通化設計
  • コードレビュー

も効率良く実施できます。

初心者向けの機能ではありませんが、中級者・上級者を目指す方にはぜひ習得していただきたい実践テクニックです。

Access 実践マスターガイド~仕事の現場で即使える | 今村 ゆうこ |本 | 通販 | Amazon
Amazonで今村 ゆうこのAccess 実践マスターガイド~仕事の現場で即使える。アマゾンならポイント還元本が多数。今村 ゆうこ作品ほか、お急ぎ便対象商品は当日お届けも可能。またAccess 実践マスターガイド~仕事の現場で即使えるもアマ…

コメント

タイトルとURLをコピーしました