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の操作をしたい
メモ帳を開くと、「ANSI」と表示されます。
この「ANSI」のテキストファイルの操作をしていきます。
デフォルトは「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行だけ読み込むことができました。
全行読み込み
次は、すべての行を読み込みこんでみます。
「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行だけ出力することができました。
これだけでは、使えませんので、次はすべての行を出力してみます。
全行出力
シートのすべての行を、コンマ区切りで、テキストファイルに出力する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