Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away