VBAでテキストファイルを読み込み配列に格納する方法

VBAで業務ツールを開発する際に、テキストファイルを読み込むというケースはよくあります。しかし、「テキストファイル(CSVやログ)を読み込んで集計したいけれど、一行ずつセルに書き出していると処理が遅い…」、「毎回同じような処理を書くのが面倒なので、汎用的に使えるサンプルコードがほしい」
そんな悩みはありませんか?
VBAでテキストファイルを読み込むのに王道な方法は、「読み込んだデータを、一旦メモリ上(配列)に格納すること」です。
今回は、ファイル選択ダイアログを使ってテキストファイルを読み込み、Excelの表と同じ形である「2次元配列」に綺麗に格納する方法を解説します。
事前準備:サンプルデータを作る
まずは、読み込みテスト用のテキストファイルを用意しましょう。
以下の内容をコピーして、Windowsの「メモ帳」に貼り付けてください。
※ANSI以外だと、読み込み時に文字化けしてしまいます。
どうやってテキストを2次元配列にする?
テキストファイルの中身は、ただの「長い文字列」です。
これを「縦×横」の表形式(2次元配列)にするには、Split関数を2段階で使うのがポイントです。
- 第1段階(縦の分解):ファイル全体を「改行コード」で区切る ⇒ 1行ごとのデータになる。
- 第2段階(横の分解):1行のデータをさらに「カンマ」で区切る ⇒ セルごとのデータになる。
サンプルコード:テキストを2次元配列に格納する
以下のコードを標準モジュールにコピペしてください。
このコードは、「ファイルを選んで、中身を2次元配列に入れて、確認のために一時停止する」までを行います。
コードのポイント解説
Split(スプリット)関数
Split(元の文字, "区切り文字") と書くだけで、区切り文字のところでデータを切断し、配列に入れてくれます。
今回は、縦(vbCrLf)と横(カンマ)で2回登場する、配列操作の主役です。
ReDim(リディム)で箱のサイズを決める
Splitで作られるのは「1次元配列(一列に並んだデータ)」だけです。
今回作りたいdataArray(行, 列)のような「2次元配列」は、「縦と横のサイズはこれくらい!」と自分で宣言(予約)する必要があります。それがReDimです。
- 縦のサイズ:
UBound(lines)(読み込んだ行数分) - 横のサイズ:
UBound(items)(1行目の項目数分)
結果の確認方法(ローカルウィンドウ)
このコードはシートに出力しません。その代わり、プログラマーが使う「ローカルウィンドウ」で中身を確認してみましょう。
- コードを実行し、
Stopの行で黄色く止まった状態にする。 - VBEのメニューから[表示] > [ローカルウィンドウ]をクリック。
- リストにある
dataArrayの左側の「+」マークをクリックして展開する。
このように、dataArray(0, 0) に「101」、dataArray(0, 1) に「佐藤」…というように、綺麗にデータが格納されていれば成功です!
まとめ
テキストファイルを2次元配列に入れる手順は以下の通りです。
- FSOで丸ごと読み込む。
- Split(vbCrLf)で行ごとに分ける。
- Split(カンマ)でセルごとに分け、2次元配列に格納する。
一度配列に入れてしまえば、VBAの中でデータの加工や集計が一瞬で終わります。ぜひこの「配列格納パターン」をマスターして、脱・初心者を目指しましょう!

