Excel VBA質問箱 IV

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

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


30102 / 76738 ←次へ | 前へ→

【51906】Re:テキストファイルを高速で読み込む
回答  Hirofumi  - 07/10/10(水) 19:09 -

引用なし
パスワード
   大分前に作った物ですが?
設定した行数分づつ読み込みます

  '1回にシート出力する行数(この取り方で多少変化有り)
  Const clngRows As Long = 1000

の値で負荷が変わりますので、色々試して下さい

Option Explicit

Public Sub Sample()

  '1回にシート出力する行数(この取り方で多少変化有り)
  Const clngRows As Long = 1000

  Dim i As Long
  Dim lngRow As Long
  Dim rngResult As Range
  Dim strResult() As String
  Dim dfn As Integer
  Dim vntFileName As Variant
  Dim strBuff As String
  Dim strProm As String
  
  If Not GetReadFile(vntFileName, ThisWorkbook.Path & "\TestData", False) Then
    strProm = "マクロがキャンセルされました"
    GoTo Wayout
  End If
  
  '画面更新を停止
  Application.ScreenUpdating = False
  
  '出力Listの左上隅セル位置を基準として設定
  Set rngResult = ActiveSheet.Cells(1, "A")
  
  dfn = FreeFile
  Open vntFileName For Input As dfn
  
  ReDim strResult(1 To clngRows, 1 To 1)
  Do Until EOF(dfn)
    Line Input #dfn, strBuff
    i = i + 1
    strResult(i, 1) = strBuff
    If i = clngRows Or EOF(dfn) Then
      rngResult.Offset(lngRow).Resize(i).Value = strResult
      lngRow = lngRow + i
      i = 0
      ReDim strResult(1 To clngRows, 1 To 1)
    End If
  Loop
  
  Close #dfn
  
  strProm = "処理が完了しました"
  
Wayout:
  
  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngResult = Nothing
  
  MsgBox strProm , vbInformation
  
End Sub

Private Function GetReadFile(vntFileNames As Variant, _
            Optional strFilePath As String, _
            Optional blnMultiSel As Boolean _
                    = False) As Boolean

  Dim strFilter As String
  
  'フィルタ文字列を作成
  strFilter = "CSV File (*.csv),*.csv," _
        & "Text File (*.txt),*.txt," _
        & "Print File (*.prn),*.prn," _
        & "CSV and Text (*.csv; *.txt),*.csv;*.txt," _
        & "全て (*.*),*.*"
  '読み込むファイルの有るフォルダを指定
  If strFilePath <> "" Then
    'ファイルを開くダイアログ表示ホルダに移動
    ChDrive Left(strFilePath, 1)
    ChDir strFilePath
  End If
  'もし、ディフォルトのファイル名が有る場合
  If vntFileNames <> "" Then
    SendKeys vntFileNames & "{TAB}", False
  End If
  '「ファイルを開く」ダイアログを表示
  vntFileNames _
      = Application.GetOpenFilename(strFilter, 3, , , blnMultiSel)
  If VarType(vntFileNames) = vbBoolean Then
    Exit Function
  End If
  
  GetReadFile = True
  
End Function

0 hits

【51766】テキストファイルを高速で読み込む ノリ 07/10/4(木) 7:20 質問
【51768】Re:テキストファイルを高速で読み込む ちん 07/10/4(木) 7:55 発言
【51769】Re:テキストファイルを高速で読み込む ハチ 07/10/4(木) 9:29 発言
【51800】Re:テキストファイルを高速で読み込む ノリ 07/10/5(金) 8:07 お礼
【51899】Re:テキストファイルを高速で読み込む Jaka 07/10/10(水) 9:31 発言
【51906】Re:テキストファイルを高速で読み込む Hirofumi 07/10/10(水) 19:09 回答
【51909】Re:テキストファイルを高速で読み込む Hirofumi 07/10/10(水) 20:43 発言
【51910】Re:テキストファイルを高速で読み込む Hirofumi 07/10/10(水) 20:52 発言

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