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

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

VBAで業務ツールを開発する際に、テキストファイルを読み込むというケースはよくあります。しかし、「テキストファイル(CSVやログ)を読み込んで集計したいけれど、一行ずつセルに書き出していると処理が遅い…」、「毎回同じような処理を書くのが面倒なので、汎用的に使えるサンプルコードがほしい」

そんな悩みはありませんか?

VBAでテキストファイルを読み込むのに王道な方法は、「読み込んだデータを、一旦メモリ上(配列)に格納すること」です。
今回は、ファイル選択ダイアログを使ってテキストファイルを読み込み、Excelの表と同じ形である「2次元配列」に綺麗に格納する方法を解説します。

事前準備:サンプルデータを作る

まずは、読み込みテスト用のテキストファイルを用意しましょう。
以下の内容をコピーして、Windowsの「メモ帳」に貼り付けてください。

【重要】保存時の注意点
最近のメモ帳は保存時に「UTF-8」になりがちですが、今回の基本コードでは「エンコード:ANSI」を選択して保存してください。
※ANSI以外だと、読み込み時に文字化けしてしまいます。

どうやってテキストを2次元配列にする?

テキストファイルの中身は、ただの「長い文字列」です。
これを「縦×横」の表形式(2次元配列)にするには、Split関数を2段階で使うのがポイントです。

  1. 第1段階(縦の分解):ファイル全体を「改行コード」で区切る ⇒ 1行ごとのデータになる。
  2. 第2段階(横の分解):1行のデータをさらに「カンマ」で区切る ⇒ セルごとのデータになる。

サンプルコード:テキストを2次元配列に格納する

以下のコードを標準モジュールにコピペしてください。
このコードは、「ファイルを選んで、中身を2次元配列に入れて、確認のために一時停止する」までを行います。

コードのポイント解説

Split(スプリット)関数

Split(元の文字, "区切り文字") と書くだけで、区切り文字のところでデータを切断し、配列に入れてくれます。
今回は、縦(vbCrLf)横(カンマ)で2回登場する、配列操作の主役です。

ReDim(リディム)で箱のサイズを決める

Splitで作られるのは「1次元配列(一列に並んだデータ)」だけです。
今回作りたいdataArray(行, 列)のような「2次元配列」は、「縦と横のサイズはこれくらい!」と自分で宣言(予約)する必要があります。それがReDimです。

結果の確認方法(ローカルウィンドウ)

このコードはシートに出力しません。その代わり、プログラマーが使う「ローカルウィンドウ」で中身を確認してみましょう。

  1. コードを実行し、Stopの行で黄色く止まった状態にする。
  2. VBEのメニューから[表示] > [ローカルウィンドウ]をクリック。
  3. リストにあるdataArrayの左側の「+」マークをクリックして展開する。

このように、dataArray(0, 0) に「101」、dataArray(0, 1) に「佐藤」…というように、綺麗にデータが格納されていれば成功です!

まとめ

テキストファイルを2次元配列に入れる手順は以下の通りです。

  1. FSOで丸ごと読み込む。
  2. Split(vbCrLf)で行ごとに分ける。
  3. Split(カンマ)でセルごとに分け、2次元配列に格納する。

一度配列に入れてしまえば、VBAの中でデータの加工や集計が一瞬で終わります。ぜひこの「配列格納パターン」をマスターして、脱・初心者を目指しましょう!

Author Profile

コウノ(
職歴年のIT技術者です。エクセル・Web制作が得意。

プロフィールの詳細

お困りごとはまずはご相談ください。パソコン・スマホ初期設定 / ツール導入・開発受付中

Back to Top