バラバラの名前で様々な部署から提出されたファイルを
ファイルの中のセルの値に従ってファイル名を変更して
フォルダごとに分けて
格納するマクロ
コード
Sub ファイル名変換とフォルダ作成と格納() Dim Path As String Dim FileName As String Dim NewfileName As String Dim ListSheet As Worksheet Dim i As Long Dim FolderName As String Dim ii As Long Application.ScreenUpdating = False 'マクロエクセルが保存されているフォルダのパスを取得 Path = ThisWorkbook.Path & "\" 'リストワークシートを作成 Set ListSheet = Worksheets.Add 'フォルダの中で拡張子がxlsxのファイルを取得 FileName = Dir(Path & "*.xlsx") i = 1 '繰り返し処理 Do While FileName <> "" 'フォルダ内のエクセルを開く Workbooks.Open Path & FileName '新しいファイル名を指定 NewfileName = Range("B5") & "_" & Range("B6") & ".xlsx" 'フォルダ名にしたい値をリストシートへ入力 ListSheet.Cells(i, 1) = Range("B5") 'ファイルを閉じる ActiveWorkbook.Close '新しいファイル名に変更 Name Path & FileName As Path & NewfileName 'ファイルを再取得 FileName = Dir i = i + 1 '繰り返し Loop 'リストシートの重複を削除 ListSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=1 'リストシートを選択 ListSheet.Select 'フォルダ作成マクロの実行 Call フォルダ作成 'フォルダ分けマクロの実行 Call フォルダ分け 'アラートを消す Application.DisplayAlerts = False 'リストシートを削除 ListSheet.Delete 'アラートを戻す Application.DisplayAlerts = True MsgBox "ファイル名変換・フォルダ作成・格納完了" End Sub Sub フォルダ作成() Dim ii As Long Dim FolderName As String Dim temp As String ii = 1 Do While Cells(ii, 1) <> "" 'フォルダ名を指定 FolderName = ActiveSheet.Cells(ii, 1) '同名のフォルダがあるか検索 temp = Dir(ThisWorkbook.Path & "\" & FolderName, vbDirectory) '同名のフォルダがない場合 If Len(temp) = 0 Then 'フォルダを作成 MkDir ThisWorkbook.Path & "\" & FolderName End If ii = ii + 1 Loop End Sub Sub フォルダ分け() Dim Path As String Dim FileName As String Dim FolderName As String 'フォルダのパスを取得 Path = ThisWorkbook.Path & "\" 'フォルダの中で拡張子が.xlsxのファイルを取得 FileName = Dir(Path & "*.xlsx") '繰り返し処理 Do While FileName <> "" 'ファイル名の_から左を振り分け先のフォルダ名とする FolderName = Left(FileName, InStr(FileName, "_") - 1) 'ファイルを移動 Name Path & FileName As Path & FolderName & "\" & FileName '次のファイルを取得 FileName = Dir Loop End Sub
注意点
- 参照するセルは任意のものに変更する
- そもそも部署名が間違えていたり、省略して書かれていると誤ったフォルダに振られる。正しく振られてているか目視で確認すること
- 同じ名前のフォルダがあるか確認して同名のフォルダがない場合に五月雨式に提出された場合も対応できるようになってるはず。