大体でIT

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

大体でIT

Excel VBAでテキストファイルからのデータの読み込みと出力する方法をShift-JISについてまとめました。これがわかっていると便利です。

はじめに

この記事ではテキストファイルを読み込む方法とテキストファイルに出力する方法をご紹介します。

データの形式がShift-JISの場合で説明しています。

Windowsのメモ帳では『ANSI』と表現されていて、『Shift-JIS』のことです。

『Shift-JIS』はWindows7のメモ帳でデフォルトとして使われていた文字コードです。

CSVファイルやエクセルでは『Shift-JIS』の文字コードを表示することができます。

なので同じ方法でCSVファイルへも読み込みと出力ができます。

この記事で紹介すること

  • Shift-JIS形式のテキストファイルを読み込む
  • Shift-JIS形式のテキストファイルへ出力

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

目次

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

最初にテキストファイルの読み込みと出力に関してポイントになるVBAコードを記載しておきます。

'テキストファイルから読み込み(Shift-JIS)
Open FilePath For Input As #1
    Do Until EOF(1)
        Line Input #1, buf
        ここでデータ保存 = buf
    Loop
Close #1

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

テキスト形式のテキストファイルの読み込みと出力に関するVBAコードになります。

この2つのコードが基本になります。

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

テキスト形式のテキストファイルの読み込みについて説明します。

読み込むテキストファイルのフォルダ構成はこちらです。

テキストファイルと同階層にマクロファイルを保存しています。

フォルダ構成

フォルダ構成

読み込みたいテキストファイルはこちらです。

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

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

複数行で複数列のテキストファイルを用意しました。

1行だけ読み込み

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

テキストファイルから読み込むVBAコードはこちらになります。

'テキストファイルから読み込み(1行だけ読み込み)
Sub Text1()
    
    'ファイルパス指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\テキスト形式.txt"
    
    'テキストを開いて1行読み込み
    Open FilePath For Input As #1
        Line Input #1, buf
        ActiveSheet.Cells(1, 1) = buf 'セルへ入力
    Close #1
    
End Sub

最初にファイルパスを指定します。

指定したファイルパスについて『Open FilePath For Input As #1』でテキストファイルを開きます。

『Line Input #1, buf』でテキストファイルの1行分のデータを『buf』に保存します。

セルに入力して、『Close #1』で開いたテキストファイルを閉じて終了です。この閉じるまでがセットですのでCloseまでコードに記載する必要があります。

テキストファイルを取得した結果です。

1行だけ読み込んだ結果

1行だけ読み込んだ結果

1行分だけ読み込まれました。

これでは使い物にならないので、次はテキストファイルの全行を読み込んでみます。

全行読み込み

テキストファイルを全行読み込むVBAコードはこちらになります。

'テキストファイルから読み込み(全行読み込み)
Sub Text2()
    
    'ファイルパスを指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\テキスト形式.txt"
    
    'テキストファイルを開いて読み込み
    i = 0
    Open FilePath For Input As #1
        'テキストファイルの最終行までループする
        Do Until EOF(1)
            Line Input #1, buf
            i = i + 1
            ActiveSheet.Cells(i, 1) = buf 'セルへ入力
        Loop
    Close #1
    
End Sub

『Do Until EOF(1)』の部分でテキストファイルの最終行までループすることができます。

『Line Input #1, buf』の部分で1行毎のデータをbufに保存していきます。

『ActiveSheet.Cells(i, 1) = buf』で1行ずつセルに入力していけばテキストファイルの全行を読み込むことができます。

読み込んだ結果です。

全行読み込んだ結果

全行読み込んだ結果

テキストファイルにはコンマ区切りで保存されているので、1列に2データずつ保存される結果となります。

エクセルのセルで扱うにはこれでは扱いづらいので次のコンマ区切りで読み込む方法について説明します。

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

テキストファイルをコンマ区切りで全行読み込むVBAコードです。

'テキストファイルから読み込み(全行、コンマ区切りで読み込み)
Sub Text3()
    
    'ファイルパスを指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\テキスト形式.txt"
    
    'テキストファイルを開いて読み込み
    i = 0
    Open FilePath For Input As #1
        Do Until EOF(1)
            Line Input #1, buf
            'コンマ区切りで分けます
            buf = Split(buf, ",")
            i = i + 1
            ActiveSheet.Cells(i, 1) = buf(0) 'セルへ入力
            ActiveSheet.Cells(i, 2) = buf(1) 'セルへ入力
        Loop
    Close #1
    
End Sub

ポイントは『buf = Split(buf, ",")』でコンマ区切りのデータを分けることです。これで、それぞれのデータがbufに配列として保存されます。

あとは分けたデータをセルに入力していけば、コンマ区切りの全行のデータを読み込むことができます。

読み込んだ結果です。

コンマ区切りで全行読み込んだ結果

コンマ区切りで全行読み込んだ結果

これでテキストファイルからすべてのデータを読み込むことができました。

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

つづいてテキスト形式でテキストファイルへ出力する方法について説明します。

『テキスト形式.txt』へデータを出力します。マクロファイルと同階層に保存しています。

出力するテキストファイルのフォルダ構造

出力するテキストファイルのフォルダ構造

テキストファイルへ出力したいエクセルデータはこちらです。

出力したいエクセルデータ

出力したいエクセルデータ

まずは、1行だけ出力する方法をご説明します。

1行だけ出力

テキストファイルへ1行だけ出力するVBAコードです。

'テキストファイルへ出力(1行のみ)
Sub Text4()
    
    'ファイルパスを指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\テキスト形式.txt"
    
    'テキストファイルを開いて出力
    Open FilePath For Output As #1
        Print #1, ActiveSheet.Cells(1, 1) & "," & ActiveSheet.Cells(1, 2)
    Close #1
    
End Sub

『Open FilePath For Output As #1』で出力するテキストファイルを開きます。

『Print #1, 出力したデータ』でテキストファイルに出力することができます。

最後に『Close #1』でテキストファイルを閉じて終了です。この閉じるまでをコードに記載する必要があります。

出力した結果を見てみます。

1行だけ出力した結果

1行だけ出力した結果

1行分だけテキストファイルに出力されていることがわかります。

では次に全行出力する方法を説明します。

全行出力

テキストファイルを全行出力するVBAコードはこちらになります。

'テキストファイルへ出力(複数行)
Sub Text5()
    
    'ファイルパスを指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\テキスト形式.txt"
    
    'テキストファイルを開いて出力
    Open FilePath For Output As #1
        '出力したい分ループします
        For i = 1 To 13
            Print #1, ActiveSheet.Cells(i, 1) & "," & ActiveSheet.Cells(i, 2)
        Next
    Close #1
    
End Sub

先ほどのVBAコードに『For i = 1 To 13』の部分を加えて出力したいデータだけ『Print #1, 出力したいデータ』をループすることでテキストファイルへ全行を出力することができます。

出力した結果を見てみます。

全行出力した結果

全行出力した結果

出力したエクセルデータがすべてテクストファイルへ出力されていることがわかります。

おわりに

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

今回ご紹介した内容はCSVファイルでも使えます。

テキストファイルをセルへ読み込むことができれば、テキストファイルに保存されたコンマ区切りやスペースで保存されているデータを解析することができますので便利です。

テキストファイルの読み込みと出力のVBAコードを組み合わせれば、一度セルへデータを取り込んだ後、修正や変更を加えて再度テキストファイルへ出力する。みたいなこともできますのでいろいろと応用ができます。

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す