最近,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
まとめ
複数のエクセルブックをタブ区切りテキストに一括で別名保存する方法を記した.
