Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


64859 / 76732 ←次へ | 前へ→

【16450】Re:CSVファイルのOPEN(遅い〜!!)
回答  Jaka  - 04/7/28(水) 9:57 -

引用なし
パスワード
   こんにちは。
CSVファイルをWorkbooks.Openで開くと信じられないぐらい遅いのは有名です。
TextをWorkbooks.OpenTextで、開いた方が速いです。
また、文字列をG/標準で読み込むとちょっと遅くなります。(特に日本語)
単純に全部文字列として読み込んだほうが速いことは速いです。

下記コードは、単純にカンマの数でフィールド数を決めていますから、
      ↓ こんなのはダメです。
"あああ","20,000",100

フィールド数が固定されているなら、下記コード中のCtに直接数字を入れてください。
[#5244]とか、他CSV、Text等で探せば色々サンプルがあると思います。

Sub OpenTextFile()
  Dim OpenFile As Variant, ReadDete As String, MyFildInf() As Variant
  Dim i As Long, Ct As Long
  
  OpenFile = Application.GetOpenFilename("TEXTのみ(*.txt), *.txt", , "TEXTのみCSVだと極端に遅い")
  If OpenFile = False Then End
  Open OpenFile For Input As #1
  Line Input #1, ReadDete
  Close #1
  
  'カンマの数を数える
  For i = 1 To Len(ReadDete)
    If Mid(ReadDete, i, 1) = "," Then
      Ct = Ct + 1
    End If
  Next
  Ct = Ct + 1
  
  ReDim MyFildInf(1 To Ct)
  For i = 1 To Ct
    MyFildInf(i) = Array(i, 2) '全部文字列で読み込む
  Next
  
  STime = Now
  Workbooks.OpenText FileName:=OpenFile, _
    DataType:=xlDelimited, Comma:=True, FieldInfo:=MyFildInf
  
  Erase MyFildInf
  MsgBox Format(Now() - STime, "hh:mm:ss")
End Sub

1 hits

【16438】CSVファイルのOPEN(遅い〜!!) POP 04/7/27(火) 22:38 質問
【16440】Re:CSVファイルのOPEN(遅い〜!!) IROC 04/7/27(火) 22:58 回答
【16450】Re:CSVファイルのOPEN(遅い〜!!) Jaka 04/7/28(水) 9:57 回答
【16475】Re:CSVファイルのOPEN(遅い〜!!) POP 04/7/28(水) 17:15 お礼

64859 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free