[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フォルダにあるCSVの行数一覧の作成方法について』(常磐線出張中)
CSVの内容分析をしていますが、ファイルが大量にありすぎてチェックが手間になってます。
行数の多い少ないでCSVのチェック担当者を変えようと思ってまして、そのためにフォルダに入っているCSVのファイル名と行数を一覧化できないかと考えております。
A列ファイル名、B列行数といったイメージです。
過去投稿でありそうな気がしたのですが無いようです。ありそうでない本件、エクセルでCSVをチェックしていることもあり、
教えを請いたく宜しく御願いします。
< 使用 Excel:Excel2016、使用 OS:Windows7 >
Option Explicit
Sub Test(FolderName As String)
Dim buf As String, fn As Integer Dim txt As String, lcnt As Long, i As Integer Sheet1.Cells(1, 1) = "フォルダー名" Sheet1.Cells(1, 2) = "ファイル名" Sheet1.Cells(1, 3) = "行数" Sheet1.Cells(2, 1) = FolderName 'フォルダーの中のCSVファイルを調べる buf = Dir(FolderName & "\*.csv") Do While buf <> "" If Right(buf, 4) = ".csv" Then 'ファイルを読み込む fn = FreeFile lcnt = 0 Open FolderName & "\" & buf For Input As #fn '行数を算出する Do While Not EOF(fn) Line Input #fn, txt lcnt = lcnt + 1 Loop Close fn 'シートに出力する Sheet1.Cells(i + 2, 2) = buf Sheet1.Cells(i + 2, 3) = lcnt txt = "" i = i + 1 End If buf = Dir() Loop End Sub
(:;:;:;:;:;) 2017/08/06(日) 16:53
>A列ファイル名、B列行数といったイメージです。
Sub test() Dim myDir As String, fn As String, n As Long With Application.FileDialog(msoFileDialogFolderPicker) If .Show Then myDir = .SelectedItems(1) & "\" End With If myDir = "" Then Exit Sub fn = Dir(myDir & "*.csv") Do While fn <> "" n = n + 1 Cells(n, 1).Resize(, 2).Value = Array(fn, 0) If FileLen(myDir & fn) Then Cells(n, 2).Value = _ UBound(Split(CreateObject("Scripting.FileSystemObject") _ .OpenTextFile(myDir & fn).ReadAll, vbNewLine)) + 1 End If fn = Dir Loop End Sub ( seiya) 2017/08/06(日) 17:05
:;:;:;:;:;さん、 seiyaさん、有難う御座います。 勝田でロックフェスタがあったとかで常磐線激混みで遅くなってしまいました。
:;:;:;:;:;さんの方につきましては、エクセルのVBにコピペしたのですが起動のさせ方が分からず断念してしまいました。使い方を教えて頂けると有難いです。
seiyaさんのほうにつきましては、A列は表示されるのですが全て「1」と表示されてしまいます。 たくさんの行のあるCSVを試してみたのですが上手く使えませんでした。ご確認いただけないでしょうか。
できましたら御返信頂けないでしょうか。
他の方法があれば拘りはありません。
宜しく御願い致します。
(常磐線出張中) 2017/08/06(日) 23:14
Option Explicit
Sub Test()
Dim buf As String, fn As Integer Dim fname As Variant, ws As Worksheet Dim txt As String, lcnt As Long, i As Integer 'ダイアログを表示する With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = True If .Show Then For Each fname In .SelectedItems Set ws = Worksheets.Add(, Worksheets(Worksheets.Count)) ws.Cells(1, 1) = "フォルダー名" ws.Cells(1, 2) = "ファイル名" ws.Cells(1, 3) = "行数" ws.Cells(2, 1) = fname 'フォルダーの中のCSVファイルを調べる buf = Dir(fname & "\*.csv") Do While buf <> "" If Right(buf, 4) = ".csv" Then 'ファイルを読み込む fn = FreeFile lcnt = 0 Open fname & "\" & buf For Input As #fn '行数を算出する Do While Not EOF(fn) Line Input #fn, txt lcnt = lcnt + 1 Loop Close fn 'シートに出力する ws.Cells(i + 2, 2) = buf ws.Cells(i + 2, 3) = lcnt txt = "" i = i + 1 End If buf = Dir() Loop Set ws = Nothing Next End If End With End Sub
(:;:;:;:;:;) 2017/08/07(月) 09:49
Dim FSO As Object, f As Object, wb As Workbook, ar As Variant, p As String Cells.Clear With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダを選択してください。" If Not .Show Then MsgBox "キャンセルします。": Exit Sub p = .SelectedItems(1) End With Set FSO = CreateObject("Scripting.FileSystemObject") Application.ScreenUpdating = False For Each f In FSO.GetFolder(p).Files If LCase(FSO.GetExtensionName(f)) = "csv" Then Set wb = Workbooks.Open(Filename:=f, ReadOnly:=True) ar = Array(f.Name, wb.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row) wb.Close False Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 2).Value = ar End If Next f Application.ScreenUpdating = True End Sub (mm) 2017/08/07(月) 10:01
> seiyaさんのほうにつきましては、A列は表示されるのですが全て「1」と表示されてしまいます。
こちらで試してください
Sub test() Dim myDir As String, fn As String, n As Long, txt As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show Then myDir = .SelectedItems(1) & "\" End With If myDir = "" Then Exit Sub fn = Dir(myDir & "*.csv") Do While fn <> "" n = n + 1 Cells(n, 1).Resize(, 2).Value = Array(fn, 0) If FileLen(myDir & fn) Then txt = CreateObject("Scripting.FileSystemObject").OpenTextFile(myDir & fn).ReadAll Cells(n, 2).Value = CntLines(txt) End If fn = Dir Loop End Sub
Function CntLines(ByVal txt As String) As Long Static RegX As Object If RegX Is Nothing Then Set RegX = CreateObject("VBScript.RegExp") With RegX .Global = True .Pattern = "[\r\n]+" CntLines = .Execute(txt).Count End With End Function ( seiya) 2017/08/07(月) 10:13
mmさんの方法が空行もカウントしてしまいますが行数が確りと表示されました。
空行も一行といわれれば一行ですし、CSVは色々な体裁があるのですね・・・。
色々とご迷惑をお掛けしました。
(常磐線出張中) 2017/08/07(月) 23:52
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.