【VBA】外部データの取り込みと整形(データ準備の自動化)

VBA

はじめに

これまでの回でVBAの基本的なロジックを組む方法を学びました。しかし、実際のデータ分析では、分析対象のデータがExcelシート上にすでにあるとは限りません。多くの場合、株価データや実験データはCSVファイルやテキストファイルとして提供されます。

今回は、VBAを使って外部のテキストファイル(CSVを含む)からデータを読み込み、Excelシート上に展開する方法を学びます。手作業でのコピー&ペーストから解放され、データ取得のプロセスを完全に自動化しましょう。

1. なぜファイル操作が重要なのか

  • 効率性: 何百、何千というファイルを手作業で開いてコピーするのは非現実的です。VBAなら、指定したフォルダ内のすべてのファイルを順番に処理することも可能です。
  • 正確性: 手作業によるコピペミスや、形式の崩れを防ぎます。
  • 再現性: 「ボタン一つで、最新のデータファイルを読み込んでレポートを作成する」といった一連の処理を、いつでも誰でも同じように実行できます。

2. ファイルを読み込む手順

VBAでテキストファイルを読み込むには、一般的に以下の手順を踏みます。

  1. ファイルパスの指定: どのファイルを読み込むのかを、PC上の住所(パス)で指定します。
  2. ファイルを開く (Open): 指定したファイルを読み込みモードで開きます。
  3. 1行ずつ読み込む (Line Input #): ファイルの終端に達するまで、1行ずつデータを読み込みます。
  4. データを分割する (Split): CSVファイルの場合、カンマ区切りのデータを個々のセルに分割します。
  5. ファイルを閉じる (Close): 読み込みが終わったら、必ずファイルを閉じます。

3. テキストファイル読み込みの実践

まずは、シンプルなテキストファイルを読み込んでみましょう。

読み込むファイル (data.txt) の中身:

Material-A
Material-B
Material-C

VBAコード:

Sub ReadTextFile()
    Dim filePath As String
    Dim fileNo As Integer
    Dim textLine As String
    Dim rowNum As Long

    ' 1. 読み込むファイルのパスを指定
    filePath = "C:\Users\PC\data.txt" ' ご自身の環境に合わせて変更してください

    ' 2. ファイルを開く
    fileNo = FreeFile ' 空いているファイル番号を取得
    Open filePath For Input As #fileNo

    rowNum = 1
    ' 3. ファイルの終端まで1行ずつループ
    Do While Not EOF(fileNo)
        Line Input #fileNo, textLine ' 1行読み込んでtextLine変数に格納
        
        ' 読み込んだ行をA列に書き出す
        Cells(rowNum, "A").Value = textLine
        
        rowNum = rowNum + 1
    Loop

    ' 5. ファイルを閉じる
    Close #fileNo

    MsgBox "ファイルの読み込みが完了しました。"
End Sub
  • Open filePath For Input As #fileNo: ファイルを「読み込み専用(Input)」で開きます。
  • FreeFile: 使用可能なファイル番号を自動で取得してくれる便利な関数です。
  • EOF(fileNo): “End Of File”の略。ファイルの終端に達するとTrueを返します。
  • Line Input #fileNo, textLine: ファイルから1行読み取り、textLine変数に格納します。

4. CSVファイルの読み込みとデータ整形

次に、より実用的なCSVファイルの読み込みに挑戦します。CSVはカンマでデータが区切られているため、Split関数を使って各データをセルに分割するのがポイントです。

読み込むファイル (stock_price.csv) の中身:

2025/08/01,1500,1520,1490,1510
2025/08/02,1510,1530,1505,1525
2025/08/03,1525,1525,1495,1500

VBAコード:

Sub ReadCsvFile()
    Dim filePath As String
    Dim fileNo As Integer
    Dim textLine As String
    Dim dataArray() As String ' 分割したデータを格納する配列
    Dim rowNum As Long
    Dim colNum As Long

    filePath = "stock_price.csv" ' ご自身の環境に合わせて変更してください

    fileNo = FreeFile
    Open filePath For Input As #fileNo

    rowNum = 1
    Do While Not EOF(fileNo)
        Line Input #fileNo, textLine

        ' 4. Split関数でカンマを区切り文字として分割
        dataArray = Split(textLine, ",")

        ' 分割したデータを横方向にセルへ書き出す
        For colNum = 0 To UBound(dataArray)
            Cells(rowNum, colNum + 1).Value = dataArray(colNum)
        Next colNum

        rowNum = rowNum + 1
    Loop

    Close #fileNo
    MsgBox "CSVの読み込みが完了しました。"
End Sub
  • dataArray = Split(textLine, ",")textLineに入っている1行の文字列を、カンマ(,)を基準に分割し、dataArrayという配列(複数の値を格納できる変数)に格納します。
  • For colNum = 0 To UBound(dataArray): 配列の最初(0番目)から最後までループを回し、各要素をセルに書き込んでいます。

データ整形について

ファイルを読み込んだデータは、たとえ数字に見えても「文字列」として扱われることがあります。分析に使う前には、CDbl()(数値に変換)やCDate()(日付に変換)といった関数を使って、適切なデータ型に変換する「データクレンジング」や「整形」と呼ばれる作業が必要になる場合があります。これは後の回で詳しく触れていきます。

まとめ

今回は、外部ファイルからデータを読み込む方法を学び、データ分析のスタートラインに立ちました。

  • VBAを使えば、テキストファイルやCSVファイルからのデータ取得を自動化できる。
  • Open → Line Input → Close がファイル読み込みの基本フロー。
  • CSVデータはSplit関数で分割してセルに展開する。

これで、様々な形式のデータをVBAで扱えるようになりました。次回は、いよいよこれらのデータを使って、平均、最大値、最小値などの基本的な統計量を計算し、データ分析の第一歩を踏み出します。

コメント