最近,Lancersを利用する機会があった.月次のファイルを10年分,計120個のブックをダウンロードし,テーブル形式に整形したブックが納品された.これらをSQL Serverにインポートしたいのだが,手動でタブ区切りテキストに別名保存するのは骨が折れる.
結局VBAで処理することにした.その際の備忘録である.
前提条件
処理前のブックはすべて同一フォルダ内にあるものとし,6桁の固定長文字列でブック名が命名されているものとする.処理を行うコードの記載されたマクロブックも同一フォルダ内にあるものとする.
別名保存するテキストファイルも同一フォルダ内に出力するものとする.
「ツール」メニューの「参照設定」でMicrosoft Scripting Runtimeにチェックを入れる.
コード
Sub sample() Dim myFSO As Scripting.FileSystemObject Dim myFiles As Scripting.Files Dim myFile As Scripting.File Dim myWB As Workbook Dim i As Long Set myFSO = New Scripting.FileSystemObject Set myFiles = myFSO.GetFolder(ThisWorkbook.Path).Files Application.ScreenUpdating = False i = 0 For Each myFile In myFiles With myFile If Left(.Name, 3) = "201" And Right(.Name, 3) <> "txt" Then Set myWB = Workbooks.Open(myFile.Path) myWB.SaveAs Filename:=myFile.ParentFolder.Path & "\" & Left(myFile.Name, 6) & ".txt", FileFormat:=xlText myWB.Close i = i + 1 End If End With Next myFile Application.ScreenUpdating = True MsgBox prompt:=i End Sub
まとめ
複数のエクセルブックをタブ区切りテキストに一括で別名保存する方法を記した.