
ExcelVBAで複数のシートをまとめて新規ブックに移動させる方法の備忘録です。作成したシート群を別のブックに吐き出す処理はあまり実用性はないかもしれませんが、動的配列やワイルドカード指定、繰り返し処理の勉強になるかと思い、記録しておきます。
やりたいこと
イメージとしては、頭に「集計_(アンダーバー)」がついているシート名を別のExcelファイルとして保存したい場合です。手作業であれば、対象のシートを選択して右クリックすると「移動またはコピー」という動作が今回の対象です。
ソースコード(ExcelVBA)
Sub Sample_001() 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
ポイント
- 配列変数arrはVariant型で宣言します。
- 配列変数arrをReDimで要素1つ分をString型で指定します。
- ForEach文はシートのコレクションでループします。
- If文はシート名をワイルドカードで対応させたかったのでLike演算子を使います。
- 配列の要素が空欄でなければReDim Preserveで配列を増やします。
以上。
コメントを投稿
別ページに移動します