VBA100本ノック 28本目:シートをブックに分割
こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
実際の業務でも、似たようなケースがあると思う。フォルダの存在確認は、
個人的にはFileSystemObjectのFolderExistsが直感的に理解しやすいので多用
している。読んで字のごとく、そのまんまだし。
ということで、作成したのがこちら。
Sub VBA_100Knock_028() ' Microsoft Scripting Runtime参照済み。 Dim FSO As Scripting.FileSystemObject Set FSO = New Scripting.FileSystemObject ' ワークシートのループ用変数。 Dim Ws As Worksheet ' 部署名。 Dim PartName As String Dim FileName As String Dim FolderName As String Dim FolderPath As String Dim FilePath As String Dim Wb As Workbook Application.ScreenUpdating = False For Each Ws In Worksheets ' 「部署名_人の名前」のシート名でないと成立しない。 PartName = Split(Ws.Name, "_")(0) FolderPath = ThisWorkbook.Path & "\" & PartName If Not FSO.FolderExists(FolderPath) Then MkDir FolderPath End If On Error Resume Next FileName = Split(Ws.Name, "_")(1) If Err.Number = 0 Then FilePath = FolderPath & "\" & FileName Ws.Copy Set Wb = ActiveWorkbook Wb.SaveAs FilePath, xlOpenXMLWorkbook Wb.Close False End If On Error GoTo 0 Next Application.ScreenUpdating = True End Sub
ファイル名やパスをいちいち変数に入れており、これを冗長と感じる
人も居るかもしれない。個人的に、誰かに引き継ぐことを前提に作る
場合は、多少くどいと思われても、上記のような作り方にすることが
多いかも。
実行した結果がこちら。
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。