大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、Shift-JIS形式のテキストファイルを読み込んだり、出力したい場合は、「Open」を使います。「Open」を使った方法はかなり高速です。テキストファイルの読み込みや出力する方法について、マスターしていきましょう。

はじめに

この記事では、Shift-JIS形式で、テキストファイルを読み込む方法と、出力する方法について、ご紹介します。

メモ帳のデフォルトは「UTF-8」ですけど、CSVでの文字化けを解消するために、「Shift-JIS」を使ったりします。

テキストファイルの操作に使うVBAコードは、「Open」になります。

「Open」を使う方法は、かなり高速でテキストファイルを読み込んだり、出力することができて便利です。

実務では、テキストファイルを操作する必要がある場合がありますので、VBAでのテキストファイルの操作について、マスターしていきましょう。

では、Shift-JIS形式で、テキストファイルの読み込みと出力する方法について、解説していきます。

この記事を読むメリット

  • Shift-JIS形式のテキストファイルの読み込みと出力する方法がわかります。

本記事の内容を動画にまとめています

目次から見たい項目へ移動すると便利ですよ。

目次

テキストファイルの読み込み・出力のVBAコードまとめ

テキストファイルの読み込み・出力のVBAコードについて、まとめています。

VBAコードまとめ

テキストファイルの読み込みと出力するVBAコードは、こんな感じになります。

VBAコードだけ確認したい場合に、ご活用ください。

Dim A, B, i

'テキストファイルから読み込み(Shift-JIS)
i = 0
Open A For Input As #1
    Do Until EOF(1)
        Line Input #1, B
        i = i + 1
        Cells(i, 1) = B
    Loop
Close #1

'テキストファイルへ出力(Shift-JIS)
Open FilePath For Output As #1
    For i = 1 To 10
        Print #1, テキストファイルへ出力したいデータ
    Next
Close #1

では、解説していきます。

Shift-JISの操作

今回操作するのは、テキストファイルの「Shift-JIS」という形式の操作になります。

Shift-JISの操作をしたい

Shift-JISのテキストファイルを操作します

メモ帳を開くと、「ANSI」と表示されます。

この「ANSI」のテキストファイルの操作をしていきます。

デフォルトは「UTF-8」

ちなみに、メモ帳のデフォルトは、「UTF-8」になります。

メモ帳のデフォルトは、「UTF-8」になります

上のように、最近では、デフォルトが「UTF-8」となっています。

ただ、CSVでの文字化けを解消するために、今回紹介する「Shift-JIS」形式を使ったりします。

では、Shift-JIS形式のテキストファイルの操作について、解説していきます。

Excel VBAでテキストファイルの読み込み(Shift-JIS)

「Shift-JIS」形式のテキストファイルの読み込みを、ExcelVBAを使ってやってみます。

1行だけ読み込み

まずは、テキストファイルの内容を読み込んでみます。

テキストファイルを読み込みたい

テキストファイルの内容を読み込んでみます

最初は、「1行だけ」読み込んでみます。

1行だけ読み込んでみる

Sub TEST1()
    
    Dim A, B
    
    'ファイルパス指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    'テキストを開く
    Open A For Input As #1
        Line Input #1, B '1行分だけ読み込み
        Cells(1, 1) = B 'セルへ入力
    Close
    
End Sub

1行だけ読み込んでみます。

1行だけ読み込んでみます

実行すると、テキストファイルの中の「1行だけ」を読み込むことができます。

1行だけ読み込むことができました

1行だけ読み込むことができました。

全行読み込み

次は、すべての行を読み込みこんでみます。

「Do Untile EOF(1)」で、テキストファイルの最終行までループします。

Sub TEST2()
    
    Dim A, B, i
    
    'ファイルパスを指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    i = 0
    'テキストファイルを開く
    Open A For Input As #1
        '最終行までループ
        Do Until EOF(1)
            Line Input #1, B '1行分だけ読み込み
            i = i + 1
            Cells(i, 1) = B 'セルへ入力
        Loop
    Close
    
End Sub

読み込むテキストファイルは先ほどと同じになります。

読み込むテキストファイル

すべての行を読み込んでみます

では、実行してみます。

すべての行を読み込めた

すべての行を読み込むことができました

すべての行を読み込むことができました。

ただ、コンマがついていて、使いづらいので、コンマ毎に分割して、取り込んでみます。

コンマ区切りで全行読み込み

コンマ区切りで、分割して、すべての行を取り込んでみます。

文字列を分割する際は、「Split」を使います。

Sub TEST3()
    
    Dim A, B, C, i
    
    'ファイルパスを指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    i = 0
    'テキストファイルを開く
    Open A For Input As #1
        '最終行までループ
        Do Until EOF(1)
            Line Input #1, B '1行分だけ取得する
            C = Split(B, ",") 'コンマ区切りで分割
            i = i + 1
            Cells(i, 1) = C(0) 'セルへ入力
            Cells(i, 2) = C(1) 'セルへ入力
        Loop
    Close
    
End Sub

先ほどと同じテキストファイルを読み込んでみます。

読み込むテキストファイル

コンマ毎に分割して、すべての行を読み込んでみます

では、実行してみます。

コンマ毎に分割して、すべての行を読み込めた

コンマ毎に分割して、すべての行を読み込むことができました

コンマ毎に分割して、すべての行を読み込むことができました。

こんな感じで、テキストファイルのデータを、Excelに読み込むことができます。

Excel VBAでテキストファイルへ出力(Shift-JIS)

次は、ExcelVBAでテキストファイルへ出力してみます。

文字コードは、「Shift-JIS」形式で出力します。

1行だけ出力

やりたい内容は、シートの値を、テキストファイルに出力したい、ということになります。

テキストファイルに出力したい

テキストファイルに出力してみます

まずは、1行だけテキストファイルに出力してみます。

1行だけ出力してみる

シートの値を1行だけ出力するVBAコードになります。

Sub TEST4()
    
    Dim A
    
    'ファイルパスを指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    'テキストファイルを開く
    Open A For Output As #1
        '1行分だけ出力
        Print #1, Cells(1, 1) & "," & Cells(1, 2)
    Close
    
End Sub

次の値を、コンマ区切りでテキストファイルに出力します。

1行だけテキストファイルに出力してみます

では、実行してみます。

1行だけ出力することができました

1行だけ出力することができました。

これだけでは、使えませんので、次はすべての行を出力してみます。

全行出力

シートのすべての行を、コンマ区切りで、テキストファイルに出力するVBAコードになります。

Sub TEST5()
    
    'ファイルパスを指定
    Dim A, i
    A = ThisWorkbook.Path & "\TEST.txt"
    
    'テキストファイルを開く
    Open A For Output As #1
        For i = 1 To 8
            '1行分だけ出力
            Print #1, Cells(i, 1) & "," & Cells(i, 2)
        Next
    Close
    
End Sub

次の表で、すべての行を、テキストファイルに出力してみます。

表を用意

すべての行を出力してみます

では、実行してみます。

すべての行を出力できた

すべての行を出力できました

すべての行を出力できました。

こんな感じで、すべての行をコンマ区切りでテキストファイルへ出力できました。

「Open」を使う方法はかなり高速

テキストファイルを読み込んだり、出力するのに使った「Open」は、かなり高速です。

大量のデータが保存されたテキストファイルの値を読み込んで、出力する時間を計測してみます。

大量データを読み込んで出力してみる

大量データのテキストファイルの値を、読み込んで、計算して、出力するVBAコードです。

Sub TEST6()
    
    t = Timer
    
    Dim Data, A, B
    ReDim Data(1 To 100001)
    
    'ファイルパス
    A = ThisWorkbook.Path & "\TEST1.txt"
    
    i = 0
    'テキストファイルを開く
    Open A For Input As #1
        '最終行までループ
        Do Until EOF(1)
            Line Input #1, B '1行分だけ読み込み
            i = i + 1
            Data(i) = B
        Loop
    Close
    
    'テキストファイルを開く
    Open A For Output As #1
        For i = 1 To 100001
            '1行分だけ出力
            If i = 1 Then
                Print #1, Data(i)
            Else
                Print #1, Data(i) * 2
            End If
        Next
    Close
    
    Debug.Print Timer - t & " 秒"
    
End Sub

読み込むテキストファイルは次のようになります。

100,001行のデータを用意しました。

100,001行のデータを用意

100,001行のデータを用意しました

こちらの100,001行のデータを読み込んで、値を2倍にして、出力します。

読み込んで、2倍にして、出力できた

100,001行のデータを読み込んで、値を2倍にして、出力できました

100,001行のデータを読み込んで、値を2倍にして、出力できました。

では、かかった時間をみてみます。

かかった時間

「Open」を使って、テキストファイルを読み込んで、出力するのはかなり高速にできます

結果は、「0.21秒」とかなり高速です。

100,001行分のデータを読み込んで出力するのに、「1秒」もかかりません。

こんな感じで、「Open」を使う方法はかなり高速にテキストファイルを処理することができます。

おわりに

この記事では、Shift-JIS形式で、テキストファイルを読み込む方法と、出力する方法について、ご紹介しました。

メモ帳のデフォルトは「UTF-8」ですけど、CSVでの文字化けを解消するために、「Shift-JIS」を使ったりします。

「Open」を使う方法は、かなり高速でテキストファイルを読み込んだり、出力することができて便利です。

実務では、テキストファイルを操作する必要がある場合がありますので、VBAでのテキストファイルの操作について、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す