編集

【ExcelVBA】複数のシートを新規ブックに移動させる

2024/06/20

ExcelVBAで複数シートをまとめて新規ブックに移動させる方法の備忘録です。作成したシート群を別ブックに吐き出す処理ってあまり実用性はないかもしれませんが、動的配列やワイルドカード指定、繰り返し処理の勉強になるかと思い、記録しておきます。

やりたいこと

頭に「集計_(アンダーバー)」がついているシート名を別のExcelファイルにコピーではなく移動させて、別のファイルとして保存したいんです~!!


ソースコード(ExcelVBA)

Sub 複数のシートを新規ブックに移動させる()

 Dim arr As Variant
 Dim j As Long
 Dim WS As Worksheet

 ReDim arr(0) As String

 For Each WS In Sheets
   If WS.Name Like "集計_*" Then
   If arr(j) <> "" Then
     j = j + 1
     ReDim Preserve arr(j)
    End If
    arr(j) = WS.Name
   End If 
 Next

 Sheets(arr).Move
 ActiveWorkbook.SaveAs "C:\Users\Tomoyuki\Desktop\test.xlsx"
 ActiveWorkbook.Close

End Sub

ポイント

  1. 配列変数arrはVariant型で宣言します。
  2. 配列変数arrをReDimで要素1つ分をString型で指定します。
  3. ForEach文はシートのコレクションでループします。
  4. If文はシート名をワイルドカードで対応させたかったのでLike演算子を使います。
  5. 配列の要素が空欄でなければReDim Preserveで配列を増やします。