Excelのマクロ処理について教えてください。 例として、あるbook(.xlsm)にシートが6枚あるとして、 このブックを4つのブックにシート分割して別名保存したいです。

  • ・キャンペーン対象の質問は「共感した」→「参加する」に変更されています。
  • ・「参加する(共感した)」を押した質問に新しい回答がつくとMy知恵袋に通知がきます。
  • ・「参加する(共感した)」を押した後に解除はできません。

ベストアンサー

この回答はいかがでしたか? リアクションしてみよう

ThanksImg質問者からのお礼コメント

お二方、ありがとうございました。 とても参考になりました。 ベストアンサーとさせて頂きます。

お礼日時:2024/11/30 9:01

その他の回答(1件)

Excel VBAを使って、指定されたシートを分割して別のブックに保存するマクロを作成できます。以下に、目的に合ったコードを記載します。 準備 1. 使用するExcelファイルがマクロ対応形式(.xlsm)で保存されていることを確認してください。 2. Excelの「開発」タブを有効にし、「Visual Basic」エディターを開きます。 3. 「挿入」→「標準モジュール」を選択し、以下のコードを貼り付けます。 マクロコード Sub SplitAndSaveWorkbooks() Dim wb As Workbook Dim newWb As Workbook Dim sheetNames() As Variant Dim savePath As String Dim i As Integer ' 保存先のフォルダを指定 savePath = Application.ThisWorkbook.Path & "\" ' 分割条件に基づくシートの配列 Dim splitSheets As Variant splitSheets = Array( _ Array("Sheet1", "Sheet4", "Sheet5", "Sheet6"), _ Array("Sheet2", "Sheet4", "Sheet5", "Sheet6"), _ Array("Sheet3", "Sheet4", "Sheet5", "Sheet6"), _ Array("Sheet4", "Sheet4", "Sheet5", "Sheet6")) ' 元のブック Set wb = ThisWorkbook ' 各グループごとに新しいブックを作成 For i = LBound(splitSheets) To UBound(splitSheets) ' 新しいブックを作成 Set newWb = Application.Workbooks.Add ' 分割対象のシートをコピー Dim sheetName As Variant For Each sheetName In splitSheets(i) If SheetExists(sheetName, wb) Then wb.Sheets(sheetName).Copy Before:=newWb.Sheets(1) End If Next sheetName ' 新しいブックのデフォルトシートを削除 Application.DisplayAlerts = False Dim defaultSheet As Worksheet For Each defaultSheet In newWb.Sheets If Not IsInArray(defaultSheet.Name, splitSheets(i)) Then defaultSheet.Delete End If Next defaultSheet Application.DisplayAlerts = True ' 新しいブックを保存 newWb.SaveAs Filename:=savePath & "SplitBook_" & (i + 1) & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled newWb.Close SaveChanges:=False Next i MsgBox "シート分割が完了しました!保存先: " & savePath End Sub ' 指定されたシートが存在するか確認する関数 Function SheetExists(sheetName As String, wb As Workbook) As Boolean Dim ws As Worksheet On Error Resume Next Set ws = wb.Sheets(sheetName) SheetExists = Not ws Is Nothing On Error GoTo 0 End Function ' 配列内に指定された値が存在するか確認する関数 Function IsInArray(value As String, arr As Variant) As Boolean Dim element As Variant IsInArray = False For Each element In arr If element = value Then IsInArray = True Exit Function End If Next element End Function --- コードのポイント 1. splitSheets 配列 各分割グループに含めるシート名を指定します。 必要に応じてこの配列を編集してください。 2. 保存先 (savePath) 元のブックと同じフォルダに保存されます。 他の場所に保存したい場合は、フルパスを設定してください(例:C:\Users\YourName\Documents\)。 3. エラーハンドリング 指定されたシートが存在しない場合でも問題なく動作します。 4. 拡張可能性 必要に応じて、追加の分割パターンや保存形式を柔軟に設定できます。 --- 実行方法 1. コードを貼り付けたら、「F5」キーを押して実行します。 2. マクロが実行され、指定したシートが新しいブックとして保存されます。 分割後のブックは「SplitBook_1.xlsm」などの名前で保存されます。必要に応じて名前の形式を変更してください。 注意 作業前に元のブックをバックアップしておくことをおすすめします。 セキュリティ設定でマクロが無効化されている場合は有効化してください。

さかさかなさん 回答ありがとうございました。 早速やってみました。 これ、めちゃくちゃ凄いです。 正直感動しました。 ちなみに教えてください。 分割したxlsmファイルですが、 次に開く時の為に、マクロを有効にする事はできますか?