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