【VBA】テキストファイルをゼロサプレスしないでブックに取り込む
<機能>
(1)メニューの データ > テキストファイル(テキストファイルから外部データを取り込み)をVBAで自動で行います
(2)OpenTextメソッドを使用してカンマ区切りのテキストファイルをシートに取り込みます(※1)
(3)パラメータ(FieldInfo)にテキスト形式(xlTextFormat)を指定しゼロサプレスされないようにします(※2)
※1 1行づつ読み込んでSplitしてもいいのですが、今回はOpenTextを使用して一気に読み込みます
※2 コード体系で前0が付いているケースは少なくありませんが普通に読み込むとエクセルの書式(標準)により前0はなくなります
<サンプルデータ>
なんちゃってサンプルデータを自動で作成します
(1列目)分類コード:0で始まるコードをテキスト形式で取り込みます
(2列目)商品コード:0で始まるコードをテキスト形式で取り込みます
(3列目)商品名
(4列目)価格
(5列目)適用日:YMD日付形式で取り込みます
<使い方>
ソース全体をそのまま張り付けてください
OpenTxtInExcelを呼び出すとアクティブシートにサンプルデータを取り込みます
<イメージ>
'//エクセルでテキストファイル(カンマ区切りで要素数=5)を開きます
'//列の形式(XlColumnDataType)の指定は
'//<1列目>テキスト形式
'//<2列目>テキスト形式
'//<3列目>テキスト形式
'//<4列目>一般形式
'//<5列目>YMD日付形式
Sub OpenTxtInExcel()
Dim strTxt As String
'//列の形式(XlColumnDataType)の指定は
'//<1列目>テキスト形式
'//<2列目>テキスト形式
'//<3列目>テキスト形式
'//<4列目>一般形式
'//<5列目>YMD日付形式
Sub OpenTxtInExcel()
Dim strTxt As String
'//テスト用のテキスト(カンマ区切り)ファイルパスを取得
'//テキストファイルを開いた時にXlColumnDataTypeを指定するため拡張子を[.txt]にしてください
strTxt = ThisWorkbook.Path & "¥Sample.txt"
'//テスト用のデータをセット
MakeSampleTxt strTxt
'//テキストファイルを開いた時にXlColumnDataTypeを指定するため拡張子を[.txt]にしてください
strTxt = ThisWorkbook.Path & "¥Sample.txt"
'//テスト用のデータをセット
MakeSampleTxt strTxt
'//全て(数式、文字列、書式、コメント、アウトライン)クリア
Cells.Select
Selection.Clear
Cells.Select
Selection.Clear
'//指定されたテキストファイルを開く
'//※FieldInfo : Array(列番号,XlColumnDataType)
'//※XlColumnDataTypeの詳細はMSDN参照
Workbooks.OpenText Filename:=strTxt, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlTextQualifierDoubleQuote, _
Comma:=True, _
Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 1), Array(5, 5))
'//※FieldInfo : Array(列番号,XlColumnDataType)
'//※XlColumnDataTypeの詳細はMSDN参照
Workbooks.OpenText Filename:=strTxt, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlTextQualifierDoubleQuote, _
Comma:=True, _
Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 1), Array(5, 5))
'//エクセルで開いたテキストファイル(アクティブブック)よりデータをコピーして閉じる
ActiveWorkbook.Worksheets(1).Cells.Copy Destination:=ThisWorkbook.ActiveSheet.Range("A1")
ActiveWorkbook.Close
ActiveWorkbook.Worksheets(1).Cells.Copy Destination:=ThisWorkbook.ActiveSheet.Range("A1")
ActiveWorkbook.Close
'//列幅の調整
Cells.Select
Selection.ColumnWidth = 10
Selection.Font.Size = 9
Range("A1").Select
End Sub
Cells.Select
Selection.ColumnWidth = 10
Selection.Font.Size = 9
Range("A1").Select
End Sub
'//テスト用にテキストファイル(カンマ区切り)を作成
'//分類コード,商品コード,商品名,価格,適用日
Sub MakeSampleTxt(ByVal strTxt As String)
Dim ff As Integer
'//分類コード,商品コード,商品名,価格,適用日
Sub MakeSampleTxt(ByVal strTxt As String)
Dim ff As Integer
'//テスト用テキスト(カンマ区切り)ファイルをオープン
ff = FreeFile
Open strTxt For Output As ff
ff = FreeFile
Open strTxt For Output As ff
'//データを書き込み
Print #ff, "01,001,大根,188,2015/1/1"
Print #ff, "01,002,人参,100,2015/1/1"
Print #ff, "01,003,男爵いも,20,2015/4/16"
Print #ff, "01,004,レタス,158,2015/9/1"
Print #ff, "01,005,トマト,298,2015/10/16"
Print #ff, "02,001,ゆず,97,2015/10/16"
Print #ff, "02,002,みかん,397,2015/10/16"
Print #ff, "02,003,リンゴ,158,2015/11/1"
Print #ff, "02,004,ぶどう,498,2015/12/1"
Print #ff, "02,005,キウイ,110,2015/12/31"
Print #ff, "02,006,いちご,548,2015/12/31"
Print #ff, "01,001,大根,188,2015/1/1"
Print #ff, "01,002,人参,100,2015/1/1"
Print #ff, "01,003,男爵いも,20,2015/4/16"
Print #ff, "01,004,レタス,158,2015/9/1"
Print #ff, "01,005,トマト,298,2015/10/16"
Print #ff, "02,001,ゆず,97,2015/10/16"
Print #ff, "02,002,みかん,397,2015/10/16"
Print #ff, "02,003,リンゴ,158,2015/11/1"
Print #ff, "02,004,ぶどう,498,2015/12/1"
Print #ff, "02,005,キウイ,110,2015/12/31"
Print #ff, "02,006,いちご,548,2015/12/31"
Close ff
End Sub
End Sub
よろしければポチッと押してください