残業を減らす!Officeテクニック
【Copilot for Microsoft 365】AI頼みでシート別にファイルとして保存するVBAを作成
2024年6月10日 06:55
同じ操作を繰り返していると自動化したくなりますよね。しかし、VBAのコードをサッと記述して実行できる人は限られます。手っ取り早く“Copilot”に手伝ってもらいましょう。
今回は、ファイルに含まれる複数のワークシートを別々のファイルとして保存する処理を書いてもらおうと思います。
操作の流れは、以前に紹介した記事と同じです。実現したい処理をプロンプトとしてCopilotに依頼して、生成されたコードを貼り付けて実行するだけです。
ここでは、Excelの画面からCopilotに質問していますが、Web版のCopilotでも同じようにVBAコードを書いてもらうことは可能です。
自動化する処理を整理する
手動でワークシートを別々のファイルとして保存する場合、主に2つの方法が考えられます。シート見出しを右クリックして[移動またはコピー]から新しいブックを作成し、移動またはコピーして新しいファイル(ブック)に名前を付けて保存する方法。もう1つは、シートの数だけファイルをコピーしておき、不要なワークシートを削除する方法です。
いずれにせよワークシートの数だけ操作を繰り返す必要があります。また、作成したファイルにはシート名と同じ名前を付けて保存する操作も必要です。これらの操作をふまえて、Copilotが生成するVBAコードの処理の妥当性を確認していきましょう。
CopilotにVBAコードを生成してもらう
画面右上の[Copilot]ボタンをクリックしてサイドウィンドウを表示して、プロンプトを入力するだけです。
以下は「ファイルに含まれるシートを別々のファイルとして保存するVBAコードを書いてください」という指示に対して、Copilotが回答したコードです。解説文を削除し、改行を追加してあります。
Sub SaveSheetsAsSeparateFiles()
Dim ws As Worksheet
Dim path As String
path = Application.ActiveWorkbook.path & "\"
For Each ws In ThisWorkbook.Sheets
ws.Copy
Application.ActiveWorkbook.SaveAs Filename:=path & ws.Name & ".xlsx"
Application.ActiveWorkbook.Close False
Next ws
End Sub
変数「path」には、ファイルを開いているパスが格納されています。ワークシートの数だけ名前(ws.Name)を付けて保存する処理がくり返されるようです(For Each ws In ThisWorkbook.Sheets)。
自分で操作したり、コードを書いたりするより圧倒的に速いですよね。VBAエディタに貼り付けて実行してみましょう。
マクロ有効ブックとして保存して実行する
ファイルを「Excelマクロ有効ブック」のXLSM形式として保存しておきます。VBAエディタを開いて、標準モジュールを追加してコードを貼り付けて実行します。
今回は問題なく動作するコードが生成されましたが、パスやファイル名が意図通りに記述されないことがあります。エラーが表示されて困った時やコードの意味がわからないときは、画面の広いWeb版Copilotで確認してみてもいいでしょう。