生成AI活用研究
AI時代におけるVBAシステム開発に関する提言

Geminiを中心に生成AIの活用と研究の記録
公開日:2025-12-08 最終更新日:2025-12-08

AI時代におけるVBAシステム開発に関する提言


個別事情はあるので一概には言えませんが、今の時点でVBAでシステム開発するのは、さすがに再検討した方が良いと思います。とくに、AIで分析できないような独自実装は避けた方が無難です。
なお、転記や軽い自動化であれば、今でも、そしてこれからも有効な使い方だと思います。


もしこれからVBA開発をするなら、全面的にAIを活用した開発を目指すべきです。
旧来の開発手法、特に低品質な実装慣習は完全に捨て去るべきです。
高凝集・低結合の原則に反する実装、すなわちAIの解析を妨げる悪しき慣習は、完全に捨て去ってください。
AIが作成・検証しやすいプログラミングを目指すべきです。

ここで重要になってくるのは関数分割です。
基本的に最も推奨されるのは、高凝集・低結合の機能分割がよいです。
さらに「高凝集・低結合」という原則を徹底するだけでなく、「AIが解析しやすい純粋性」を意識してください。

具体的には、入出力処理と純粋なビジネスロジックを厳格に分離するデータ分割を核とし、各関数が単一の機能に集中し、外部依存を引数と戻り値のみに限定することで、AIが検証しやすい独立した部品としてコードを構築します。

AI時代のVBA開発は、用途を限定し、開発手法を変革し、コードの純粋性と独立性を最優先します。
純粋性の追求こそが、AIがコードを書きやすく、さらにAIに頼った保守が可能になるための鍵となります。
これこそが、AIの力を借りて高品質で保守性の高いコードを継続的に生み出す唯一の道筋となります。

以上の文章は筆者が書いたものです。
この文章をAIに入れて、補足してもらったものが以下になります。


AIによる補足

1. 「純粋性」がAI連携に不可欠な理由

レポートで強調した 「純粋性」 は、純粋関数設計(Pure Function Design) に基づきます。この原則に従うことで、AIはコードを「ブラックボックス」ではなく「数学的な関数」として扱えるようになります。

純粋性の二つの特性:
  • 参照透過性(Referential Transparency)
    同じ入力(引数)を与えれば、何度実行しても必ず同じ出力(戻り値)を返す。
  • 副作用の排除
    関数の実行が外部状態(グローバル変数、シートのセル値、ファイルなど)を一切変更しない。

これにより、AIは関数の引数と戻り値のパターンを大量に学習し、最適なテストケース(単体テスト)を自動生成できます。結果として、コード生成・検証・デバッグの精度と効率が大幅に向上します。


2. 関心事の分離(Separation of Concerns)

AIが解析しやすいコードを作るうえで、関心事の分離(SoC) は極めて重要です。

関心事の分離とは:
「ひとつのコード(関数・モジュール)が、ひとつの種類の責務だけを扱う」
という設計原則です。

VBAでは特に以下の3つを明確に分離すると、AIの解析能力・生成能力が最大限発揮されます。
  1. 入出力(I/O)
     例:シート読み書き、ファイル操作、UI、MsgBox
  2. ビジネスロジック(計算・判断・変換)
     純粋関数として外部依存を排除
  3. アプリケーション制御(フロー制御)
     どの関数をいつ呼ぶかを管理
特にI/Oとロジックを混在させるとAIがコードの意味を切り分けられず、生成・テスト・保守の精度が著しく落ちます。

3. VBAにおける悪しき慣習の具体例

「AIの解析を妨げる悪しき慣習」は、純粋性の原則に反する実装です。VBAで特に見られる例は以下の通りです。
  • グローバル変数への依存
    関数内部で Public 変数を読み書きする。参照透過性を損ない、関数の出力が入力以外に依存してしまう。
  • シート・セルへの直接アクセス
    Range("A1").Value = data や Cells(1,1).Value など。
    意図せず外部状態を変更し、副作用を生む。
  • イベントドリブン処理の巨大化
    Worksheet_Change やユーザーフォームのボタンクリックイベントに複雑なロジックを詰め込む。
    高凝集・低結合に反し、AIによる部分的な検証を困難にする。

4. エクセル数式とVBA純粋関数の関係

  • エクセル数式(ワークシート関数)は純粋関数のモデル
    • 入力(セル値)に応じて常に同じ結果を返す(参照透過性)。
    • 外部状態を変更せず副作用がない。

AI時代のVBA開発では、VBAコード内にこの品質と特性を持つ関数を増やすことが理想です。
こうすることで、Office製品との親和性を保ちつつ、AIによる保守や解析が容易になります。

5. 技術的負債の回避と継続可能性

低品質なVBAコードは、手作業による保守工数を増やす 「技術的負債」 となります。
AIが解析できないコードは、この負債を増加させる原因です。

純粋関数設計を採用することは、開発段階から AIによる保守を前提とした構造 を作ることを意味します。
結果として、将来の技術的負債を防ぎ、AIを活用して高品質かつ保守性の高いVBAコードを継続的に生成できる、最も費用対効果の高い戦略となります。


※本記事の作成にあたっては、一部の文章作成に生成AI(Gemini)を使用しています。最終的な内容は人間による確認・編集を経て掲載しています。




新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ