Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What is going on with this article?
@ktyubeshi

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

More than 5 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
15
Help us understand the problem. What is going on with this article?
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
ktyubeshi
計測(電気)中心に手広くやってるエンジニア。プログラミングはLabVIEWメイン。 基本Windows & GUI育ち。Linuxは使いながら勉強中。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
15
Help us understand the problem. What is going on with this article?