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
ポイント
- 配列変数arrはVariant型で宣言します。
- 配列変数arrをReDimで要素1つ分をString型で指定します。
- ForEach文はシートのコレクションでループします。
- If文はシート名をワイルドカードで対応させたかったのでLike演算子を使います。
- 配列の要素が空欄でなければReDim Preserveで配列を増やします。
コメントを投稿
別ページに移動します