【ExcelVBA】テキストファイルやCSVファイルの行数を特定するには

この記事では、テキストファイルやCSVファイルの行数を特定する方法についてご説明します。

【動画】テキストファイルやCSVファイルの行数を特定する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


行数を数えたいファイル名をFileSystemObjectオブジェクトのOpenTextFileメソッドの第1引数に設定し、Lineプロパティから行数を取得しています。

テキストファイルやCSVファイルの行数を特定する方法

テキストファイルやCSVファイルの行数を特定するには、次の流れの通りマクロを作成します。

マクロ作成の流れ

STEP.1
FileSystemObjectオブジェクトの生成
FileSystemObjectオブジェクトを生成します。
FileSystemObjectオブジェクトは、行数を取得するOpenTextFileメソッドを実行するのに必要です。
STEP.2
行数を数えたいファイル名をOpenTextFileメソッドの引数に設定し、Lineプロパティから行数を取得する
行数を数えたいファイル名をOpenTextFileメソッドの引数に設定し、Lineプロパティから行数を取得します。
補足
本記事ではCSVファイルを扱って説明を進めていますが、テキストファイルでも同様に行数を取得することができます。
CSVファイルをテキストファイル(.txtのファイル)に置き換えて説明をお読みください。

コードの例

Excelのマクロのコードは次の通りに記述していきます。

Option Explicit

Private Sub btn_exec_Click()
    
    Dim fso         As Object       'FileSystemObjectのインスタンス用変数
    
    'FileSystemObjectのインスタンスを生成する
    Set fso = New FileSystemObject

    'データファイルの行数を取得してセルに出力する
    '・セルE3:行数を読み取りたいCSVファイル
    '・セルE6:取得した行数を出力するセル
    Range("E6").Value = fso.OpenTextFile(Range("E3").Value, 8).Line
    
    '後処理
    
    Set fso = Nothing

End Sub

Excelファイル(例)

先ほどのExcelのマクロのコードを実行するExcelファイル(例)は次の通りです。

セルE3には行数を読み取りたいCSVファイル(フルパス)を入力します。

実行ボタンがクリックされると先ほどのExcelのマクロが呼び出され、取得された行数がセルE6に出力されます。

コードの解説

注目すべきコード①

最初に見て頂きたいのは13行目です。

    'データファイルの行数を取得してセルに出力する
    '・セルE3:行数を読み取りたいCSVファイル
    '・セルE6:取得した行数を出力するセル
    Range("E6").Value = fso.OpenTextFile(Range("E3").Value, 8).Line

行数を数えたいファイル名をOpenTextFileメソッドの第1引数に設定し、このメソッドが実行されるとLineプロパティから行数を取得することができます。

OpenTextFileメソッドの第2引数に設定されている「8」という数値は「追加モード」という意味です。

追加モードを設定するとOpenTextFileメソッド実行時にOpenTextFileメソッドがCSVファイルの最終行を探します。

例えばCSVファイルの行数が10行ある場合は、10行目(の末尾から)がCSVファイルの最終行になります。

その最終行は10であり、CSVファイルの行数でもあります。

なので、「10」という値がLineプロパティに設定されるので、セルE6にその値を出力します。

注目すべきコード②

最初に見て頂きたいのは8行目です。

    'FileSystemObjectのインスタンスを生成する
    Set fso = New FileSystemObject

この行でFileSystemObjectのインスタンスを生成します。

OpenTextFileメソッドを実行するのにFileSystemObjectのインスタンスが必要です。

動作確認

行数が知りたいCSVファイルは次の通りです。

このCSVファイルから行数を特定します。

マクロを実行した後E6のセルに、CSVファイルの行数と同じ値がE6のセルに出力されていることが確認できます。

【注意】CSV内のデータの最終行から1行改行されていると、その改行も1行としてカウントされる

一つ注意点があるのですが、CSV内のデータの最終行から1行改行されていると、その改行も1行としてカウントされるので注意が必要です。

例えば次のCSVファイルを見て頂きたいのですが、10行目で1行改行されています。

このCSVファイルに対してマクロを実行すると、マクロは11という値を返します。

この結果を見て、データは10行しかないはずだけどなんで11の値が返ってきたのだろう・・・?と思うかもしれません。

実際にはCSV内のデータは10行ですが、改行1つ分が行数にカウントされるので気を付けてくださいね。

【注意】参照設定が必要です

一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。

参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。

  1. Windows Script Host Object Model(wshom.ocx)

なぜ必要かというと、先ほどのコードの8行目でFileSystemObjectのインスタンスを生成する際に「wshom.ocx」というファイルを参照するからです。

    'FileSystemObjectのインスタンスを生成する
    Set fso = New FileSystemObject

この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。

ここでは「wshom.ocx」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「wshom.ocx」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。

最後に

本記事では、テキストファイルやCSVファイルの行数を特定する方法についてご説明しました。

FileSystemObjectオブジェクトを使えば簡単にCSVファイルの行数を取得することができます。

テキストファイルやCSVファイルの行数を特定したい時は参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら