#はじめに
ExcelでCSVやタブ区切りテキストファイルを読み込むと、フォーマットを自動認識して数値の先頭のゼロが消えてしまったり、勝手に日付と解釈したりとか色々と問題を起こします。
ネットで調べてみるとこれを解決するために全て文字列として読み込む方法を色々と試行錯誤しているようですが、どれもしっくりこないのでコードを書いてみました。
処理内容
1. ファイルダイアログで読み込むファイルを選択
2. 事前に全セルのフォーマットを文字列にセットする
3. ファイルを1行バッファに読み込む
4. 区切り文字で分割してセルに書き出す
5. EOFまで3,4を繰り返す
※ 改行コードがCR+LFでない場合には対応していません。事前に変換して下さい。
(LFのみのファイルを指定すると列方向に書き出されてしまいます。)
#VBAコード
ExcelVBA
Option Explicit
Sub ReadTabDelimitedTextFile()
'タブ区切りファイルを全て文字列として読み込む
Dim FileName As String
Dim i As Long
Dim Cnt As Long
Dim Buf As Variant
Dim FileNo As Integer
Dim SplitString As Variant
'ファイルダイアログを表示
FileName = Application.GetOpenFilename("テキストファイル,*.txt")
If FileName <> "False" Then
'全セル選択して書式を文字列にセットする
Cells.Select
Selection.NumberFormatLocal = "@"
Cells(1, 1).Select
'空いているファイル番号を取得
FileNo = FreeFile()
Buf = Space(FileLen(FileName))
'ファイルを開いてbufに1行読み込み
' → タブで配列に分割
' → セルに書き出し
Open FileName For Input As #FileNo
Do Until EOF(FileNo)
Line Input #FileNo, Buf
Cnt = Cnt + 1
SplitString = Split(Buf, vbTab)
For i = 0 To UBound(SplitString)
Cells(Cnt, i + 1) = SplitString(i)
Next i
Loop
Close #FileNo
'そのままでは数式等が使えなくなるため、書式を標準に戻す
Cells.Select
Selection.NumberFormatLocal = "G/標準"
Cells(1, 1).Select
Else
'ファイルダイアログをキャンセルされた場合何もしない
End If
End Sub