LoginSignup
15

More than 5 years have passed since last update.

ExcelでCSVやタブ区切りファイルを文字列として読み込む

Last updated at Posted at 2015-04-10

はじめに

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15