ChatGPTでVBAを作る方法|建設帳票では先に仕様を決める理由

AI活用

ChatGPTを使えば、Excel VBAのコード自体はかなり短時間で作れるようになりました。

「このセルを別シートへ転記したい」 「フォルダ内のExcelを順番に開きたい」 「条件に合うデータだけ一覧表へまとめたい」

こうした処理であれば、やりたいことを文章で説明するだけでもVBAコードを生成できます。

一方、建設実務で使っているExcel帳票を自動化しようとすると、単にコードを書くだけでは安定しません。

問題になりやすいのはVBAの文法よりも、

  • どのシートのどの情報を読むのか
  • そのセルが実務上何を意味しているのか
  • 自治体や発注者ごとの様式差をどう扱うのか
  • どこまで自動化してよいのか
  • 想定外の帳票をどう扱うのか

といった、コードを書く前の仕様です。

この記事では、ChatGPTでVBAを作るときに、特に建設帳票では何を先に決めておくと安定しやすいのかを整理します。

ChatGPTでVBAを書くこと自体は難しくなくなった

以前はExcel VBAを使おうとすると、まず文法を調べる必要がありました。

Workbook、Worksheet、Range、Cells、For、Ifなどを調べながら、自分で処理を組み立てていく必要があります。

現在はChatGPTへ、

「点検調書シートのB4セルを一覧シートのA2セルへ転記するVBAを書いて」

と依頼すれば、短い処理ならすぐにコードを生成できます。

たとえば、説明用の最小例なら次のようになります。

Sub SampleCopy()

    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet

    Set wsSource = ThisWorkbook.Worksheets("点検調書")
    Set wsTarget = ThisWorkbook.Worksheets("一覧")

    wsTarget.Range("A2").Value = wsSource.Range("B4").Value

End Sub

コードそのものは単純です。

しかし、この処理で本当に重要なのは、

「B4セルには何が入っているのか」

という点です。

橋梁名なのか、路線名なのか、管理番号なのか。

さらに、別の自治体の帳票でもB4セルが同じ意味なのか。

ここはVBAだけを見ても分かりません。

ChatGPTはコードを書くことはできますが、こちらが説明していない業務上の意味まで自動的に確定できるわけではありません。

建設帳票では見た目とデータ構造が一致しないことがある

建設実務で使うExcel帳票は、一般的な一覧表とは少し性格が違います。

たとえば、

  • セル結合が多い
  • 印刷レイアウトが優先されている
  • 同じ項目でも様式によってセル位置が違う
  • 数値や文字ではなくShapeで評価を表現している
  • 1つの情報が複数の成果品へ重複している
  • 過年度成果との整合確認が必要になる

といったケースがあります。

人間が帳票を見ると、

「ここが健全性の評価だな」

と理解できても、Excel内部では単純なセル値ではないことがあります。

逆に、似たようなセルが並んでいても、実務上は別の意味を持っている場合があります。

そのため、

「このシートを全部読み取って一覧化して」

という依頼だけでAIにコードを書かせると、VBA自体は動いても、業務上正しい結果になるとは限りません。

建設帳票を扱う場合は、

コード生成より先に、どこに何の情報があり、それが何を意味するのかを決める作業

が重要になります。

先に決めたい仕様1 対象ファイルとシート

まず決めたいのは、何を処理対象にするかです。

たとえば、

  • 指定したExcelファイルだけを処理する
  • 指定フォルダ内のxlsxを処理する
  • ファイル名に特定の文字が含まれるものだけ処理する
  • 「様式1」シートが存在するファイルだけ処理する

といった条件です。

「フォルダ内のExcelをすべて処理する」という仕様では、関係のないファイルまで読み込む可能性があります。

実務で使うツールでは、何を処理するかだけでなく、

何を処理しないか

も決めておく方が安全です。

先に決めたい仕様2 セルと実務項目の対応

次に重要なのがセルマッピングです。

たとえば次のように整理します。

実務項目 シート セル
橋梁名 様式1 B4
路線名 様式1 F4
橋長 様式1 H8
健全性 様式2 J18

重要なのは、単にセル番地を記録することではありません。

「B4に文字列がある」

ではなく、

「B4は橋梁名を表している」

という対応関係を確定します。

この対応が決まっていれば、VBAコードは後から作り直せます。

逆に、セルと実務項目の対応が曖昧なままだと、どれだけ綺麗なコードを書いても処理結果を信用できません。

建設帳票の自動化では、このセルマッピング自体が重要な設計情報になります。

先に決めたい仕様3 出力するデータ構造

入力元だけでなく、出力側も先に考えます。

たとえば、

  • 新しいExcel一覧表へ出力する
  • 既存の統合マスタへ追加する
  • 別シートへ転記する
  • CSVとして出力する

といった違いがあります。

さらに重要なのが、データの単位です。

橋梁点検であれば、

  • 1橋1行
  • 1径間1行
  • 1損傷1行
  • 1写真1行

では、必要なデータ構造がまったく違います。

ここを決めずにコードを書き始めると、途中で列構成や処理方法そのものを変更することになります。

AIへコードを依頼する前に、

最終的に何を1行として管理するのか

まで決めておくと設計しやすくなります。

先に決めたい仕様4 変更してはいけない範囲

建設成果品を扱う場合、元の帳票を壊さないことも重要です。

たとえば、

  • 入力元ファイルへ書き込まない
  • シート名を変更しない
  • セル結合を解除しない
  • 数式を値へ置換しない
  • 印刷範囲を変更しない
  • Shapeを削除しない

といった制約です。

ChatGPTへの依頼では、

「何を実行するか」

だけではなく、

何を変更してはいけないか

も伝えます。

これはAIに限った話ではなく、業務用VBAの仕様として重要です。

特に実成果品を扱う場合は、読み取り専用の処理と書き換え処理を明確に分けた方が安全です。

先に決めたい仕様5 想定外データの扱い

実務ファイルは、必ずしも想定通りではありません。

たとえば、

  • 対象シートが存在しない
  • 指定セルが空欄
  • 数値のはずの場所に文字が入っている
  • 古い様式が混在している
  • Shapeが存在しない
  • 同じ項目が複数存在する

といったケースがあります。

このときAIやVBAに推測させるのか、処理を止めるのかを決めます。

方法としては、

  • 空欄として出力する
  • 警告を表示する
  • ログへ記録して次のファイルへ進む
  • 対象外として処理しない
  • 処理全体を停止する

などがあります。

建設成果品では、分からない値を推測して埋めるより、

分からないものを分からないまま残して、人間が確認できる状態にする

方が適切なケースもあります。

先に決めたい仕様6 完成条件

最後に、何をもって完成とするかを決めます。

たとえば、

  • 指定した項目が正しい列へ出力される
  • 対象外ファイルを処理しない
  • 空欄を勝手に補完しない
  • エラー対象をログへ記録できる
  • 元ファイルの値や書式が変更されていない
  • 数件を人間が確認して元帳票と一致する

といった条件です。

VBAがエラーを出さず最後まで動いたことと、業務として正しい結果になったことは別です。

特に成果品を扱うツールでは、

正常終了したかではなく、期待した成果になったか

を確認します。

ChatGPTには仕様をまとめて渡す

ここまで整理できれば、ChatGPTへの依頼内容も具体的になります。

たとえば次のような形です。

目的:
橋梁点検調書から指定項目を一覧シートへ転記する。

入力:
・このブック内の「点検調書」シート
・B4:橋梁名
・F4:路線名
・J18:健全性

出力:
・「一覧」シート
・A列:橋梁名
・B列:路線名
・C列:健全性

条件:
・入力元シートには書き込まない
・対象セルが空欄の場合は空欄のままにする
・存在しない項目を推測して補完しない
・まず最小構成のコードにする

確認条件:
・3項目が指定列へ転記される
・入力元の値、数式、書式を変更しない

これなら、AI側が勝手に決める必要のある項目がかなり減ります。

逆に、

「橋梁点検調書を自動化するVBAを書いて」

だけでは、決まっていないことが多すぎます。

コード生成能力の問題ではなく、要求仕様の問題です。

AIに任せやすい部分と人間が決める部分

ChatGPTを使ったVBA開発では、役割を分けて考えると整理しやすくなります。

AIに任せやすいのは、

  • WorkbookやWorksheetの操作
  • RangeやCellsの処理
  • 繰り返し処理
  • ファイル一覧取得
  • 条件分岐
  • 定型的なエラー処理
  • ログ出力
  • 短いテストコードの生成

といった部分です。

仕様が明確であれば、こうした処理はAIがコードへ変換しやすい領域です。

一方、人間側で確定したいのは、

  • このセルが業務上何を意味するか
  • どの評価値を正として扱うか
  • 発注者ごとの様式差をどう扱うか
  • どこまで自動化するか
  • 想定外データをどう処理するか
  • どの状態を成果品として正しいと判断するか

といった部分です。

これはVBAの文法ではなく、建設実務の理解に関する問題です。

セルマッピングはコードとは別の資産になる

建設帳票の自動化を進めると、コードそのものよりセルマッピングの方が重要になる場合があります。

たとえば、

  • 橋梁名はどこにあるか
  • 径間番号はどこにあるか
  • 損傷番号はどこにあるか
  • 健全性はセル値なのかShapeなのか
  • 写真番号と損傷番号はどう対応するか

といった情報です。

VBAコードは、仕様さえ残っていればAIで再生成できます。

しかし、実際の帳票を確認して、

「この位置がこの実務項目に対応する」

と判断した情報は、簡単には再生成できません。

自治体ごとに帳票が違う場合も、

共通する処理と、帳票ごとのセルマッピング差分を分ける

と横展開しやすくなります。

最初から大きな完成コードを作らない

AIへVBAを依頼すると、つい最初から全部の機能を作らせたくなります。

しかし複雑な建設帳票では、

  1. まず1項目だけ読む
  2. 取得位置が正しいか確認する
  3. 数項目へ増やす
  4. 例外処理を追加する
  5. 複数ファイルへ広げる

という順番の方が問題を切り分けやすくなります。

エラーが起きたときも、

  • セル位置が違うのか
  • コードが違うのか
  • 帳票自体が例外なのか

を判断しやすくなります。

小さく動かしてから拡張すれば、ChatGPTへ修正を依頼するときも、

「この部分だけ直してほしい」

と具体的に指示できます。

AI生成VBAを業務で使う前に確認する

AIが生成したVBAを、いきなり実成果品で実行するのは避けた方が安全です。

少なくとも、

  • 元ファイルをコピーする
  • ダミーまたはサニタイズ済みデータで試す
  • 数件を人間が元帳票と照合する
  • 書き換え対象を確認する
  • 想定外ファイルの挙動を確認する
  • Excel環境による差を確認する

といったテストを行います。

特にファイル削除、シート削除、上書き保存、大量ファイル変更などの処理を含む場合は注意が必要です。

確認用の読み取り処理と、実際にファイルを書き換える処理は分けて考えた方が安全です。

ChatGPTでVBAを作るときに重要なのはコードの前段

ChatGPTによって、VBAコードを書くハードルはかなり下がりました。

ただし建設帳票の自動化では、

VBAを書けることと、業務を正しく自動化できることは同じではありません。

先に必要なのは、

  • 対象帳票を決める
  • 項目の意味を確認する
  • セルマッピングを固定する
  • 入出力を決める
  • 変更禁止範囲を決める
  • 例外時の扱いを決める
  • テスト条件を決める

ことです。

ここまで決まれば、ChatGPTはかなり強力な実装支援になります。

逆に、ここが曖昧なままでは、動くVBAができても実務上正しいか判断できません。

AIを使ってコードを書く作業が速くなったからこそ、

業務の意味を整理し、実装できる仕様へ翻訳する作業

の重要性は、以前より大きくなっています。

ダウンロード

維持DXでは、国交省様式を対象とした橋梁点検支援ツールを無料・機能制限版として公開しています。

実際の処理イメージを確認したい方は、以下のフォームからお申し込みください。

フォーム送信後に、ダウンロード案内をお送りします。

    お名前(任意)

    メールアドレス(必須)

    会社名・所属(任意)

    ご関心のある内容(任意)

    ご相談内容(任意)

    ご注意

    ダウンロードしたExcelでマクロが実行できない場合は、
    右クリック → プロパティ →「許可する」 をチェック後、再度開いてください。

    Windowsのセキュリティ機能により、初回実行時にマクロがブロックされる場合があります。