Excel VBA質問箱 IV

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

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


19577 / 76732 ←次へ | 前へ→

【62585】Re:巨大なCSVファイルの読み込みに関して
発言  kanabun  - 09/8/2(日) 19:15 -

引用なし
パスワード
   ▼kosuke さん:
こんにちは。

>列数は、287です。今回質問のデータは、22列にありましたが、
>今後、他の列にも発生する可能性があります。
>また、" "内に,があったり、なかったりします。

Input#ステートメントで 1項目ずつ読んでみました。
なので、超低速です。

Sub 超256列CSV読み込み()
  Dim myCSV As String
  myCSV = Application.GetOpenFilename("287列CSV,*.csv")
  If myCSV = "False" Then Exit Sub
  
  '------- テキストファイルの全行数取得
  Dim io As Integer
  Dim buf() As Byte
  Dim maxRow As Long
  Dim maxCol As Long
  Dim i As Long, j As Long, n As Long
  
  io = FreeFile()
  Open myCSV For Binary As io
   n = LOF(io)
   ReDim buf(1 To n)
   Get #io, , buf
  Close io
  maxRow = UBound(Split(StrConv(buf, vbUnicode), vbCrLf))
      
  '------- テキストファイルの列数取得
  For i = 1 To n
    If buf(i) = 13 Then
      If buf(i + 1) = 10 Then
        maxCol = i + 1
        Exit For
       End If
    End If
  Next
  Dim S As String
  Open myCSV For Input As io
  j = 0
  Do While Seek(io) < maxCol
    j = j + 1
    Input #io, S
    Debug.Print j, S
  Loop
  Close io
  maxCol = j
  
  '------- 配列に読み込み
  ReDim v(1 To maxRow, 1 To maxCol)
  Open myCSV For Input As io
  For i = 1 To maxRow
    For j = 1 To maxCol
      Input #io, v(i, j)
    Next
  Next
  Close io
  
  '------- シートに展開
  Dim nOld As Long
  Dim nSheet As Long, maxSheet As Long
  Dim m As Long, mz As Long, mCol As Long
  Const mm = &H100    'シート最大列数
  Dim v2()
  maxSheet = maxCol \ mm - (maxCol Mod mm > 0)
  With Application
    nOld = .SheetsInNewWorkbook
    .SheetsInNewWorkbook = maxSheet  '◆必要なシート枚数のBookを
    .Workbooks.Add          '新規追加
    .SheetsInNewWorkbook = nOld
  End With
  For m = 1 To maxCol Step mm
    nSheet = nSheet + 1
    mz = m + mm - 1
    If mz > maxCol Then mz = maxCol
    mCol = mz - m + 1
    If nSheet = 1 Then
      Worksheets(1).Cells(1).Resize(maxRow, mCol).Value = v
    Else
      ReDim v2(1 To maxRow, 1 To mCol)
      For i = 1 To maxRow
        For j = 1 To mCol
          v2(i, j) = v(i, m + j - 1)
        Next
      Next
      Worksheets(nSheet).Cells(1).Resize(maxRow, mCol) _
        .Value = v2
    End If
  Next
  
  MsgBox maxSheet & "つのシートに読み込みました"
  
End Sub

567 hits

【56405】巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/16(月) 15:36 質問
【56406】Re:巨大なCSVファイルの読み込みに関して kanabun 08/6/16(月) 15:56 発言
【56408】Re:巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/16(月) 16:22 回答
【56432】Re:巨大なCSVファイルの読み込みに関して Yuki 08/6/17(火) 10:58 発言
【56434】Re:巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/17(火) 13:01 お礼
【56438】Re:巨大なCSVファイルの読み込みに関して Yuki 08/6/17(火) 15:50 発言
【56440】Re:巨大なCSVファイルの読み込みに関して アヒルペンギン 08/6/17(火) 16:28 お礼
【62580】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/1(土) 16:42 質問
【62581】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/1(土) 19:27 発言
【62582】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/2(日) 10:52 発言
【62585】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/2(日) 19:15 発言
【62587】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/2(日) 23:22 発言
【62589】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/3(月) 10:09 発言
【62590】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/3(月) 11:00 発言
【62591】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/3(月) 11:40 発言
【62592】Re:巨大なCSVファイルの読み込みに関して kanabun 09/8/3(月) 12:00 発言
【62593】Re:巨大なCSVファイルの読み込みに関して kosuke 09/8/3(月) 13:07 お礼

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