「タブ区切り」・「カンマ区切り」のテキストファイル(拡張子.txt)をエクセルシートに書き出すマクロを紹介します
【ポイント】取り込み対象のテキストファイルを「ファイルを開くダイアログ」でユーザが自由に指定できます
テキストファイルをExcelシートに取り込むマクロ
以下のコードを標準モジュールに貼り付けて実行します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Sub テキスト読み込み() Dim txtName As String txtName = Application.GetOpenFilename("テキストファイル,*.txt") If txtName <> "False" Then Open txtName For Input As #1 End If Dim r As Long r = 1 '1行目から書き出す Do Until EOF(1) Dim buf As String Line Input #1, buf Dim aryLine As Variant '文字列格納用配列変数 aryLine = Split(buf, vbTab) '読み込んだ行をタブ区切りで配列変数に格納 Dim i As Long For i = LBound(aryLine) To UBound(aryLine) 'インデックスが0から始まるので列番号に合わせるため+1 Cells(r, i + 1) = aryLine(i) Next r = r + 1 Loop Close #1 MsgBox "終了しました。" End Sub |
マクロの使い方
マクロを実行すると、ファイルを開くダイアログが出現します。シートに書き出したいテキストファイルを選択して「開く」をクリックします。
マクロ実行時に、アクティブになっているExcelシートに書き出されます。
コードの解説
上記のソースコードのポイント部分を解説していきます。
As #1で、開くテキストファイルに”1”という番号を付けています。この番号を後続の処理で使用します。
1 |
Open txtName For Input As #1 |
EOF関数でテキストファイルの最終行まで繰り返します。(1)は、テキストを選択して開いたときに付けた番号(As #1)です
1 2 3 |
Do Until EOF(1) '~~~ Loop |
Line Input で1行丸ごと変数bufに格納します。
1 |
Line Input #1, buf |
「タブ区切り」とは、各文字の間に、目に見えないTab文字が含まれていることです。このTab文字も含めて、変数bufに格納しています。
「カンマ区切り」の場合は「カンマ」という文字が目に見えるのでイメージしやすいですね。
Split関数を使用して、変数bufをvbTabで区切ります。vbTabはTab文字を表します。
1 |
aryLine = Split(buf, vbTab) |
※カンマで区切る場合はこのように記述します
1 |
aryLine = Split(buf, ",") |
変数aryLineに格納されている文字を一つずつセルに書き込みます。
1 2 3 |
For i = LBound(aryLine) To UBound(aryLine) Cells(r, i + 1) = aryLine(i) Next |
①LBound関数とUBound関数を使用して、配列のインデックスの下限と上限を取得し、その範囲の処理を繰り返します。
②配列変数aryLineのインデックス番号は0から始まるのに対し、セルの列番号は1から始まります(1列目~)。そのため、書き込み先の列番号を+1します。
これで1行を書き込めました。あとはLoopで最終行まで繰り返します。
1 |
Close #1 |
最後にファイルを閉じるのを忘れずに!