|
▼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
しばらくはこのコードでいこうと思います。アドバイスありがとうございました!
|
|