質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

6181閲覧

フォルダ内のCSVファイルの行数を一覧表示させたい

S.Kitsune

総合スコア14

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2019/07/21 07:33

フォルダにあるCSVファイルの行数を一覧で表示させたいです。
VBAやPowerShellでの方法をググったのですがいまいち上手くいかず、教えていただけると助かります。

 ファイル数:約60ファイル(6GB)
行数/1ファイル:50万行〜100万行程度
出力形式は問いません。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.Kitsune

2019/07/21 09:37

失礼いたしました。ルールを理解していなかったようです。 ご指摘ありがとうございました。
guest

回答1

0

ベストアンサー

CSVファイルを読み込む、Msgboxで行数を出力するマクロです。
ファイルサイズが大きいため、分割してファイルを読み込んでいます。
(int_count = 4 で 2の4乗 つまり16回に分割する設定)

VBA

1'参考サイト 2'VBA でファイルを高速に読み込む | 二律背反 3'http://blog.kouga.net/?eid=102 4' 5'上記サイトの方法で、高速読込とメモリ対策を実装 6' [1] CSVファイルをバイナリデータで高速読込 7' [2] [1]の処理は、メモリ対策でファイル分割 8 9Public Sub Csv_Byte_Read01() 10 Const int_count = 4 'CSV読込時のファイル分割数(2 ^ int_count)を指定 11 Dim openFilename As Variant 12 openFilename = Application.GetOpenFilename("ブック(*.csv),*.csv") 13 If VarType(openFilename) = vbBoolean Then Exit Sub 14 15 Dim num As Integer 16 Dim buf() As Byte 'バイナリデータ処理用 17 Dim str_unicode As String 18 Dim Records() As String 'csv一括読込用の配列 19 Dim rCnt As Long 'ループカウンター 20 Dim dCnt As Long 'ループカウンター 21 22 num = FreeFile 'ファイル番号を取得する 23'************************************************************* 24' バイナリモードで開く 25' 分割読込の場合 For Binary の後に Lock Read が必要 26'************************************************************* 27 Open openFilename For Binary Lock Read As #num 28 Do 29 DoEvents: DoEvents 30 'ファイルの長さを取得し、変数bufの大きさを確保する 31 ReDim buf(LOF(num) \ 2 ^ int_count) 32 'ファイルを変数bufに読み込む 33 Get #num, , buf 34 35 '前回の残りデータを追加。改行コードで区切り、配列に代入 36 Records = Split(str_unicode & StrConv(buf, vbUnicode), vbNewLine) 37 'この配列は行ごとのデータになる。 38 39 Erase buf 40 '最終行はデータ不完全のため別処理 41 For rCnt = LBound(Records) To UBound(Records) - 1 42 dCnt = dCnt + 1 43 '●ここにメイン処理を書く● 44 Next rCnt 45 46 '最終行の処理 47 If UBound(Records) > 0 Then 48 '残ったデータがある場合、次の解析に回す 49 str_unicode = Records(UBound(Records)) 50 Debug.Print Records(UBound(Records)) 51 End If 52 53 Erase Records 54 Loop While Not EOF(num) 55 Close #num 'ファイルを閉じる 56 MsgBox dCnt & "行" 57End Sub

投稿2019/07/21 08:05

TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.Kitsune

2019/07/21 09:42

作業依頼になってしまいすみませんでした。 いただいたコードでカウントできました。ありがとうございました。 なお、MSGボックスではなく、指定フォルダの複数cab ファイルの行数をテキストやエクセルに一括で出力するにはどうカスタマイズすれば良いでしょか。お時間ありましたらで結構ですのでよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問