VBA

【ExcelVBA】テキストファイルを取り込んでエクセルシートに書き出すマクロ

ねぇもりさん、「タブ」とか「カンマ」で区切られてるテキストファイルをExcelに取り込みたいなぁ
もり
もり
たしかにそのままだと見にくいよね。エクセルシートに取り込むマクロを作ってみよう

「タブ区切り」・「カンマ区切り」のテキストファイル(拡張子.txt)をエクセルシートに書き出すマクロを紹介します

vbatext1

【ポイント】取り込み対象のテキストファイルを「ファイルを開くダイアログ」でユーザが自由に指定できます

vbatext2

テキストファイルをExcelシートに取り込むマクロ

以下のコードを標準モジュールに貼り付けて実行します

マクロの使い方

マクロを実行すると、ファイルを開くダイアログが出現します。シートに書き出したいテキストファイルを選択して「開く」をクリックします。

vbatext2-2

マクロ実行時に、アクティブになっているExcelシートに書き出されます。

コードの解説

上記のソースコードのポイント部分を解説していきます。

As #1で、開くテキストファイルに”1”という番号を付けています。この番号を後続の処理で使用します。

 

EOF関数でテキストファイルの最終行まで繰り返します。(1)は、テキストを選択して開いたときに付けた番号(As #1)です

 

Line Input で1行丸ごと変数bufに格納します。

「タブ区切り」とは、各文字の間に、目に見えないTab文字が含まれていることです。このTab文字も含めて、変数bufに格納しています。

vbatext3

 

「カンマ区切り」の場合は「カンマ」という文字が目に見えるのでイメージしやすいですね。

buf = “あ,い,う,え,お”

Split関数を使用して、変数bufをvbTabで区切ります。vbTabはTab文字を表します。

 

vbatext4

※カンマで区切る場合はこのように記述します

 

変数aryLineに格納されている文字を一つずつセルに書き込みます。

①LBound関数とUBound関数を使用して、配列のインデックスの下限と上限を取得し、その範囲の処理を繰り返します。

②配列変数aryLineのインデックス番号は0から始まるのに対し、セルの列番号は1から始まります(1列目~)。そのため、書き込み先の列番号を+1します。

vbatext5

これで1行を書き込めました。あとはLoopで最終行まで繰り返します。

最後にファイルを閉じるのを忘れずに!