| 
    
     |  | ▼kanabun さん: >▼ひよっこ さん:
 >
 >よこからスミマセンm(_ _)m
 >
 >>        With FSO.OpenTextFile(TargetFile, 8)
 >>          '複数ファイルがある場合、ファイルの総行数を集計する
 >>          gCnt = gCnt + Line ★
 >>          .Close
 >>        End With
 >ここのところは
 >        With FSO.OpenTextFile(TargetFile, 8)
 >          '複数ファイルがある場合、ファイルの総行数を集計する
 >          gCnt = gCnt + .Line - 1 ★
 >          .Close
 >        End With
 >ではないでしょうか?
 
 ああ・・・CSVは-1するのでした。最後の行の改行を忘れていました。
 ご指摘ありがとうございます><
 
 
 >>読み込むファイルのサイズは平均的に5・6Mと
 >5・6Mものファイルだったら時間はそれ相応にかかると思いますよ。
 
 やはりそうですよね・・・1Mのときもあれば9M以上のときもあります。
 5〜6Mを複数ファイル分集計しているので我慢ということですね:
 
 >あと、
 >For〜Nextループの中で 何度も
 >>  Set FSO = CreateObject("Scripting.FileSystemObject")
 >     … … …
 >>  Set FSO = Nothing
 >
 >やっていますが、その必要はないので、
 >Loopの外に出せば 若干効率よくなると思います。
 
 こちらもご指摘ありがとうございます。
 ループの外に出しまして以下のコードとしました。
 
 'プログレスバー進捗用処理
 '行数格納用変数
 Dim gCnt As Long
 Dim FSO As Object
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Dim TargetFile As String
 
 '複数ファイルの場合には、ファイル数分ループさせ、全ファイルの行数を取得する
 For fcount = 1 To UBound(UserForm1.FileName)
 
 TargetFile = UserForm1.FileName(fcount)
 
 'ファイルの存在確認(存在しなければ処理を中断する)
 If Dir(UserForm1.FileName(fcount)) = "" Or TargetFile = "False" Then
 
 MsgBox TargetFile & vbCrLf & "を取得できませんでした。" _
 & vbCrLf & "ファイルを確認して下さい", vbCritical, "ファイル取得失敗"
 Unload Me
 Unload UserForm1
 Exit Sub
 End If
 
 'ファイルを書き込みモードで読み込む
 With FSO.OpenTextFile(TargetFile, 8)
 gCnt = gCnt + .Line - 1
 .Close
 End With
 Next
 
 ProgressBar1.Max = gCnt
 Set FSO = Nothing
 
 しばらくはこのコードでいこうと思います。アドバイスありがとうございました!
 
 |  |