【業務効率向上】ChatGPTでソースコードを解析し、Excelマクロで処理フロー図を自動生成する方法

Excel
スポンサーリンク

1.はじめに

1.1 本記事の対象者

  • 業務の中で「ソースコードの処理フローを可視化したい人
  • 古いシステムを運用していて、ドキュメントもなく途方に暮れている人

1.2 本記事の目的

  • 「簡単なコード」から「処理フロー図(オブジェクト)」をExcelで作るまでの流れを知る。

2.「簡単なコード」から「処理フロー図(オブジェクト)」をExcelで作るまでの流れ

昨今、生成AIが流行っており、触る機会が多くなったため、何か業務効率につながりそうな事例があれば書きたい思っていました。

自分が運用担当しているシステムはとても古くすべてのドキュメントが残っているわけではないため、地道な調査をしながら書きこさないといけないことが多々あります。

ただ、人手で実施するにしても限界があるので、いろいろ調査していると生成AIに作成支援してもらえればいいのではないかと思いました。

実行した結果は、完全とまではいかないですが、足がかりとなると思うので、記載していきます。

2.1.使用ツールと前提条件

使用する生成AIはChatGPTになります。

職場では使用する生成AIは異なる生成AIですが、同じような出力ができたので、結果オーライと思っています。

「簡単なコード」では今回サンプルとして以下の概要説明の挙動をするものを取り扱います。

「簡単なコード」の概要説明

本関数 calculate_discount(price, quantity) は、指定された商品の単価(price)と数量(quantity)に基づいて、割引を適用し、最終価格を計算・出力する関数です。合計金額が10,000円を超えるか否かで割引率が変動します。

それでは、早速サンプルのコードを用いて、処理フロー図を作成していきます。

2.2.ChatGPTで処理フロー情報を抽出する

2.2.1.サンプルのソースコードの提示

前述した処理フロー図の作成対象となる「簡単なコード」は以下になります。

Python
def calculate_discount(price, quantity):
total = price * quantity
if total > 10000:
discount = total * 0.2
else:
discount = total * 0.1
final_price = total - discount
print(f"Final price is {final_price}")

2.2.2.ChatGPTへのプロンプト例

サンプルコードに対して、最終的にVBAのソースコードでExcelマクロで処理フロー図のオブジェクトを作成するように依頼する方法は以下になります。

プロンプト例

下のpythonのソースコードの処理フローを作成したいので、Excelのマクロで出力できるようにVBAのソースコードを作成してほしい。

def calculate_discount(price, quantity):
total = price * quantity
if total > 10000:
discount = total * 0.2
else:
discount = total * 0.1
final_price = total – discount
print(f”Final price is {final_price}”)

2.2.3.ChatGPTの出力結果

前項番の「ChatGPTへのプロンプト例」で出力されたVBAのコードは以下になります。

VB
Sub CreatePythonFlowchartSafe()

    Dim ws As Worksheet
    If TypeName(ActiveSheet) <> "Worksheet" Then
        MsgBox "標準のワークシートで実行してください。"
        Exit Sub
    End If
    Set ws = ActiveSheet

    ' 既存の図形削除
    On Error Resume Next
    ws.Shapes.SelectAll
    Selection.Delete
    On Error GoTo 0

    ' 座標とレイアウト設定
    Dim topPos As Double: topPos = 50
    Dim leftPos As Double: leftPos = 100
    Dim vSpacing As Double: vSpacing = 120
    Dim hSpacing As Double: hSpacing = 300
    Dim maxStepsPerColumn As Integer: maxStepsPerColumn = 6

    ' ステップ定義
    Dim steps As Variant
    steps = Array( _
        "開始", _
        "total = price * quantity", _
        "total > 10000?", _
        "割引 = total * 0.2", _
        "割引 = total * 0.1", _
        "final_price = total - discount", _
        "print(f'Final price is {final_price}')", _
        "終了" _
    )

    ' 図形配列の用意
    Dim shapes() As Shape
    ReDim shapes(0 To UBound(steps))

    ' 図形作成
    Dim i As Integer
    Dim colOffset As Integer
    For i = 0 To UBound(steps)
        Dim shp As Shape
        Dim thisTop As Double
        Dim thisLeft As Double

        thisTop = topPos + (i Mod maxStepsPerColumn) * vSpacing
        colOffset = Int(i / maxStepsPerColumn)
        thisLeft = leftPos + colOffset * hSpacing

        ' 図形の選択
        On Error Resume Next
        Select Case steps(i)
            Case "開始", "終了"
                Set shp = ws.Shapes.AddShape(msoShapeRoundedRectangle, thisLeft, thisTop, 200, 60)
            Case "total > 10000?"
                Set shp = ws.Shapes.AddShape(msoShapeDiamond, thisLeft, thisTop, 200, 100)
            Case Else
                Set shp = ws.Shapes.AddShape(msoShapeRectangle, thisLeft, thisTop, 200, 60)
        End Select
        On Error GoTo 0

        ' 図形が正常に作成されたかを確認
        If Not shp Is Nothing Then
            shp.TextFrame2.TextRange.Text = steps(i)
            Set shapes(i) = shp
        Else
            MsgBox "図形の作成に失敗しました: " & steps(i), vbExclamation
        End If
    Next i

    ' 矢印の描画(簡易接続)
    For i = 0 To UBound(shapes) - 1
        If Not shapes(i) Is Nothing And Not shapes(i + 1) Is Nothing Then
            With ws.Shapes.AddConnector(msoConnectorStraight, 0, 0, 0, 0)
                .ConnectorFormat.BeginConnect shapes(i), 3 ' 下
                .ConnectorFormat.EndConnect shapes(i + 1), 1 ' 上
                .Line.EndArrowheadStyle = msoArrowheadTriangle
            End With
        End If
    Next i

    MsgBox "処理フロー図が作成されました!"
End Sub

後ほど「2.4.工夫ポイント」にも記載するのですが、1回だけのやり取りで作成されたコードではエラーとなる可能性が高いため、それを修正する方法を記載します。

ちなみにその修正方法というのは、エラー個所とエラーの内容をChatGPTに修正してもらうようにします。

2.3.Excelマクロでオブジェクト(処理フロー図)を作成

2.3.1.Excel上でのVBAの貼り付けまで

ExcelでVBAを実行することを知っている方はあまりいらない項番なので、不要だと思う人は飛ばしてください。

2.3.1.1.Excelを開く
2.3.1.2.「マクロ」の編集するボタンを押下する

タブ「開発」を押下後に、「マクロ」を押下します。

2.3.1.3.マクロ名を入力・作成

マクロ名を入力します。

ここでは、ChatGPTが作成したVBAにある名称「CreatePythonFlowchartSafe」を使用します。

2.3.1.4.マクロ名の入力画面に遷移ししていることを確認
2.3.1.5.ChatGPTが作成したVBAコードを貼り付け
2.3.1.6.実行を押下

2.3.2.作成したマクロを実行した結果のExcel画面

作成したマクロで実行した結果の処理フロー図は以下になります。

2.4.工夫ポイント

項番「2.3.2.作成したマクロを実行した結果のExcel画面」から処理フロー図が作成できていることが分かります。

項番「2.2.3.ChatGPTの出力結果」でも触れているのですが、ChatGPTとの一度のやり取りではエラーとなるソースコードを作成されることがあります。

その場合は、エラー個所とエラー内容をChatGPTに連絡・修正依頼すれば、修正版のソースコードを作成してもらえます。その際のやり取りを念のため記載します。

2.4.1.ChatGPTとの1度目の出力結果

そのまま画面キャプチャを張ります。(解像度が悪くて申し訳ないのです。。)

2.4.2.一度目の出力結果を用いたVBA実行結果

前項番で出力されたVBAをExcel上で実行したら、以下のエラーが出ました。

エラー個所の特定方法は、「ステップイン」で一行ずつ実行をするようにして、特定させました。

「ステップイン」の方法については、申し訳ございませんが、他のサイトなどで調べてみてください。

2.4.3.修正依頼のプロンプト例

ChatGPTへの修正依頼は、以下のプロンプトで実施しました。

プロンプト例

上のVBAでは、 shapes(i) = shpの部分で以下のエラーが発生するため、それを解決するためのソースコードを作成してほしい。
実行時エラー’91’オブジェクト変数またはWithブロック変数が設定されていません。

解像度が悪くて申し訳ないのですが、イメージをつかむために実際のやり取りの画面キャプチャも貼り付けておきます。

エラーが発生するだけ修正依頼をすれば、エラーなしのソースコードを作成することができます。

たまにエラー個所はあっているのですが、ChatGPTがエラー想定した原因と異なる原因でエラーが発生していることがあるため、それは地道にデバッグするしかない時はあります。

ただ、ちゃんと原因を突き止めれば、最後まで修正はやってくれるので良いかと思います。

3.まとめ

まとめに入ります。

ChatGPTでソースコードを解析し、Excelマクロで処理フロー図を自動生成する方法を紹介しました。

ドキュメントがないことで運用に行き詰っている手掛かりになったり、資料作成の工数削減に貢献できるような題目だと思っています。

Excelでの設計書が多く存在する会社では、結果は荒いですが、本当に役に立つと思います。

また、生成AIも人と同じで一発で正しい回答を返してくれるという風には思わずに、対話しながら精度を高めていく必要があると最近触っていて肌で感じています。

本記事が何か役に立つことができれば幸いです。

最後まで読んでいただきありがとうございます

コメント

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