残業を減らす!Officeテクニック
既存Excelマクロを触らずに改修!? 該当シートをCopilotに見せてコードを書き換える
2026年9月21日 08:04
以前の記事では、[マクロの記録]で作成したコードをCopilotに修正してもらい、複数のシートを1枚ずつPDFファイルとして保存できるようにしました。
正常に動いているマクロでも、実際に使っていると運用方法が変わることがあります。今回は、「必要な支社だけPDFファイルとして出力したい」「ファイル名に請求月も入れたい」という要望が加わったとします。
自分でVBAを書き換えるなら、どの部分でシートを判定しているのか、ファイル名をどこで指定しているのかを調べる必要があります。しかし、既存コードを丸ごとCopilotに渡して修正版を作ってもらえば、1行ずつコードを修正する必要はありません。
さらに今回は、ExcelのCopilotを使います。開いているデータの内容を参照できるため、[設定]シートの列構成まで細かくプロンプトへ書かずに相談してみましょう。
[設定]シートを見てもらって改修を依頼する
[設定]シートには、「支社」「対象シート」「請求月」「出力」の各列が用意されています。[出力]列にはチェックボックスがあり、PDFファイルとして保存したい支社だけONにできるようになっています。
既存のコードはExcelのCopilotにコピー&ペーストしますが、「A列が支社名」「B列が対象シート」といった情報まではプロンプトに含めません。[設定]シートを確認してもらい、「何を基準に処理するのか」「どのような結果にしたいのか」を伝えます。
一方、正常に動いている処理まで変更されないよう、「保存先を選択する処理」と「PDF出力の設定」は必要がなければ変更しないことも指定します。
以下のマクロは正常に動いています。
Sub PDF出力()
Dim ws As Worksheet
Dim SavePath As String
Dim fd As FileDialog
' フォルダー選択ダイアログを表示
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show <> -1 Then Exit Sub
SavePath = fd.SelectedItems(1)
' すべてのワークシートを順番に処理
For Each ws In ThisWorkbook.Worksheets
' 表示中かつ「設定」シート以外を対象
If ws.Visible = xlSheetVisible And ws.Name <> "設定" Then
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=SavePath & "¥" & ws.Name & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End If
Next ws
End Sub
[設定]シートの内容を確認して、PDFファイルの出力対象やファイル名を[設定]シートの内容から判断するように改修してください。以下の要件を踏まえて、修正後のコードを全文で出力してください。
・[出力]のチェックボックスがONになっている行だけを対象にして、指定されているワークシートをPDFファイルとして保存する
・PDFファイル名には「支社」列と「請求月」列を使い、「支社名_請求月.pdf」とする
・現在の保存先を選択する処理とPDF出力の設定は、必要がなければ変更しない
[設定]シートの実際の構造を参照しない場合、「1行目が見出しで2行目以降がデータ」と仮定したコードになることもあります。今回生成されたコードはどうでしょうか。
Option Explicit
Sub PDF出力()
Dim wsSetting As Worksheet
Dim wsTarget As Worksheet
Dim SavePath As String
Dim FileName As String
Dim BranchName As String
Dim TargetSheetName As String
Dim BillingMonth As String
Dim LastRow As Long
Dim RowNo As Long
Dim fd As FileDialog
Set wsSetting = ThisWorkbook.Worksheets("設定")
' フォルダー選択ダイアログを表示
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show <> -1 Then Exit Sub
SavePath = fd.SelectedItems(1)
' 設定シートの最終行を取得
LastRow = wsSetting.Cells(wsSetting.Rows.Count, "A").End(xlUp).Row
' 設定シートを順番に処理
For RowNo = 4 To LastRow
' [出力]がON(TRUE)の行だけを対象
If wsSetting.Cells(RowNo, "D").Value = True Then
BranchName = Trim$(CStr(wsSetting.Cells(RowNo, "A").Value))
TargetSheetName = Trim$(CStr(wsSetting.Cells(RowNo, "B").Value))
BillingMonth = Trim$(CStr(wsSetting.Cells(RowNo, "C").Value))
Set wsTarget = Nothing
On Error Resume Next
Set wsTarget = ThisWorkbook.Worksheets(TargetSheetName)
On Error GoTo 0
If Not wsTarget Is Nothing Then
' ファイル名:支社_請求月.pdf
FileName = BranchName & "_" & BillingMonth & ".pdf"
wsTarget.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=SavePath & "\" & FileName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Else
MsgBox "対象シート「" & TargetSheetName & _
"」が見つかりません。" & vbCrLf & _
"設定シートの" & RowNo & "行目を確認してください。", _
vbExclamation
End If
End If
Next RowNo
MsgBox "PDFファイルの出力が完了しました。", vbInformation
End Sub
注目したいのは、変数「RowNo」のループが「4」、つまり実際にデータが始まる4行目からになっていることです。[出力]列のTRUE/FALSE、各列の値、ファイル名の組み立ても[設定]シートの構成に沿っています。既存の保存先を選択する処理やPDFファイルとして保存する処理は、そのまま利用されています。
指示していないメッセージボックス表示の処理が追加されていますが、今回のPDF出力の結果には影響しないため、そのまま採用します。
生成されたコードに丸ごと置き換えて確認する
修正版のコードが生成されたら、既存のマクロを1行ずつ修正する必要はありません。Visual Basic Editorで元のコードを修正版へ置き換えます。
現状の[設定]シートでは、東京、大阪、福岡のチェックがONになっているので、3支社のPDFファイルが「東京_202609.pdf」のようなファイル名で出力されれば成功です。
この後、チェックのON/OFFを切り替えたり、「請求月」を変更したりして、想定どおりに動作するか確認する必要があります。Copilotが生成したコードでもデバッグは欠かせませんが、それは人間がコードを修正した場合でも同じです。
既存マクロを改修する時は、コードをCopilotに渡して修正内容を細かく指示するだけでなく、処理の判断材料になるシートも参照してもらう方法があります。「何を変えたいか」「何を変えたくないか」を伝え、ファイルの内容も踏まえてコードを作り直してもらう。こうした使い方なら、VBAの細かな修正箇所を自分で特定しなくても、現在の運用に合わせて既存マクロを改修できます。



























