Excel VBA質問箱 IV

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

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


25638 / 76732 ←次へ | 前へ→

【56432】Re:巨大なCSVファイルの読み込みに関して
発言  Yuki  - 08/6/17(火) 10:58 -

引用なし
パスワード
   ▼アヒルペンギン さん:
>Excelだと、横方向にはFFまでしか項目を読む事ができないようですが今回取り扱っているCSVは横方向に2000以上項目があります。シートを分割してもかまわないのでどうにかExcelで読み込む必要があるのですが、VBAでそういった処理をする事が可能でしょうか?先人の方々教えていただけると幸いです。

XL2007だったら一つのシートでいけますね。
数万行のデータだったらすごく時間がかかりそうです。

Sub TEXT_CSV2K_READ()
  Dim FSO   As Object  ' File System Obj
  Dim FsoTS  As Object  ' FSO.TextStream Obj
  Dim File  As Object  ' FSO.file Obj
  Dim strFN  As String  ' File Name
  Dim eLN   As Long   ' CSVファイルの行数
  Dim CLM   As Long   ' シート数
  Dim strD  As String  ' 一行データ
  Dim vD   As Variant ' 一行分配列
  Dim vA()  As Variant ' シート用配列
  Dim vX()  As Variant ' セル用
  Dim i    As Long
  Dim j    As Long
  
  strFN = "D:\Excel\Test.csv"
  
  Set FSO = CreateObject("Scripting.FileSystemObject")
  
  Set FsoTS = FSO.OpenTextFile(strFN, 8)
  eLN = FsoTS.Line - 1
  FsoTS.Close
  
  Set File = FSO.GetFile(strFN)
  Set FsoTS = File.OpenAsTextStream(1)
  
  ' 前処理
  strD = FsoTS.ReadLine
  
  vD = Split(strD, ",")
  If UBound(vD) > 255 Then
    CLM = Int(UBound(vD) / 256) + 1
  Else
    CLM = 1
  End If
  ' シート不足分追加
  If Worksheets.Count < CLM Then
    Worksheets.Add Count:=CLM - Worksheets.Count
  End If

  ReDim vX(1 To CLM)
  ReDim vA(1 To eLN, UBound(vD) - 1)
  
  For i = 1 To CLM
    vX(i) = vA
  Next
  
  j = 1
  For i = 0 To UBound(vD)
    vX(Int(i / 256) + 1)(j, i Mod 256) = vD(i)
  Next
  
  '本処理
  Do While Not FsoTS.AtEndOfStream
    DoEvents
    strD = FsoTS.ReadLine
    vD = Split(strD, ",")
    j = j + 1
    For i = 0 To UBound(vD)
      vX(Int(i / 256) + 1)(j, i Mod 256) = vD(i)
    Next
  Loop
  
  ' シートに貼り付け
  For i = 1 To CLM
    DoEvents
    With Worksheets(i)
      .Cells.ClearContents
      .Range("A1").Resize(j, 256).Value = vX(i)
    End With
  Next
  FsoTS.Close
  Set FsoTS = Nothing
  Set FSO = Nothing
End Sub
1 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 お礼

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