Sub シート収集()
html
1 Dim filePath As Variant 2 filePath = Application.GetOpenFilename( _ 3 FileFilter:="Excelブック(*.xlsx;*.xlsm;*.xls),*.xlsx; *.xlsm; *.xls", MultiSelect:=True) 4 5 Dim file As Variant 6 Dim wb As Workbook 7 Dim i As Long 8 Dim name As Variant 9 name = Array("01北海道", "02東京", "03大阪", "名古屋", "05福岡") 10 11 For Each file In filePath 12 Set wb = Workbooks.Open(file) 13 If Not wb Is Nothing Then 14 Select Case True 15 Case wb.name = name(i) & ".xlsx" 16 wb.Sheets(2).name = name(i) & " 内訳" 17 wb.Sheets(2).Copy Before:=ThisWorkbook.Worksheets(1) 18 End Select 19 wb.Close False 20 End If 21 Next file 22End Sub
**以下の作業は、毎日行われ、開くファイルの数は作業する日によって変わるとします。
**
選択ダイアログで複数ファイルを選択し、thisworkbookに開いたファイルのシートを集めていくというマクロです。
常に配列の01~05全てのファイルと開くとすると問題なく動くのですが、作業するファイルは毎日変わる(01と02のみ動かしたい時もあれば、03と04と05のみ動かしたい時もある)ため、うまくいきません。
html
1 Case wb.name = name(i) & ".xlsx" 2 wb.Sheets(2).name = name(i) & " 別紙" 3 wb.Sheets(2).Copy Before:=ThisWorkbook.Worksheets(1) 4 End Select
例えば02東京と03大阪のファイルを選択して、マクロを動かすと
name(0)である"01北海道"が該当しないため、マクロがなにもせず終わってしまいます。
もちろん、全てのCaseを書けば問題が解決することはわかりますが、実際の作業ファイルは40程あるため、メンテナンス性を考えて短くしたいと思っています。
どうかご教示いただけたらと思います。
よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。