残業を減らす!Officeテクニック

【Copilot for Microsoft 365】AI頼みでシート別にファイルとして保存するVBAを作成

複数シートを別々のファイルとして保存するVBAコードを書いてもらった

 同じ操作を繰り返していると自動化したくなりますよね。しかし、VBAのコードをサッと記述して実行できる人は限られます。手っ取り早く“Copilot”に手伝ってもらいましょう。

 今回は、ファイルに含まれる複数のワークシートを別々のファイルとして保存する処理を書いてもらおうと思います。

 操作の流れは、以前に紹介した記事と同じです。実現したい処理をプロンプトとしてCopilotに依頼して、生成されたコードを貼り付けて実行するだけです。

 ここでは、Excelの画面からCopilotに質問していますが、Web版のCopilotでも同じようにVBAコードを書いてもらうことは可能です。

自動化する処理を整理する

 手動でワークシートを別々のファイルとして保存する場合、主に2つの方法が考えられます。シート見出しを右クリックして[移動またはコピー]から新しいブックを作成し、移動またはコピーして新しいファイル(ブック)に名前を付けて保存する方法。もう1つは、シートの数だけファイルをコピーしておき、不要なワークシートを削除する方法です。

 いずれにせよワークシートの数だけ操作を繰り返す必要があります。また、作成したファイルにはシート名と同じ名前を付けて保存する操作も必要です。これらの操作をふまえて、Copilotが生成するVBAコードの処理の妥当性を確認していきましょう。

サンプルのファイルには[商品情報][在庫表][発注履歴]の3つのワークシートが含まれている
各ワークシートを別々のファイルとして保存する場合、「ワークシートを移動またはコピーして、ファイル名を付けて保存」の処理をワークシートの数(ここでは3回)くり返す必要がある

CopilotにVBAコードを生成してもらう

 画面右上の[Copilot]ボタンをクリックしてサイドウィンドウを表示して、プロンプトを入力するだけです。

「ファイルに含まれるシートを別々のファイルとして保存するVBAコードを書いてください」と指示した
Copilotから回答されたVBAコード。[コピー]をクリックする

 以下は「ファイルに含まれるシートを別々のファイルとして保存する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エディタを開いて、標準モジュールを追加してコードを貼り付けて実行します。

ファイルをExcelマクロ有効ブック(xlsm)として保存しておく。[開発]タブにある[Visual Basic]をクリックする
[挿入]-[標準モジュール]をクリックして、標準モジュールを追加しておく。Copilotが生成したコードを貼り付けて実行する
シートが別々のファイルとして保存された

 今回は問題なく動作するコードが生成されましたが、パスやファイル名が意図通りに記述されないことがあります。エラーが表示されて困った時やコードの意味がわからないときは、画面の広いWeb版Copilotで確認してみてもいいでしょう。

自動生成されたVBAコードについて、Web版Copilotに問い合わせてみた。1ステップずつ解説してくれる