Excel VBA質問箱 IV

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

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


25635 / 76735 ←次へ | 前へ→

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

引用なし
パスワード
   ▼アヒルペンギン さん:
貴方のデータが分からないのでチョット分かりません。
テストに使用したデータ作成は

Sub CSVWrite()
  Dim strD  As String
  Dim i    As Long
  Dim j    As Long
  Dim intF  As Integer
  intF = FreeFile
  Open "D:\Excel\Test.csv" For Output As #intF
  For j = 1 To 20
    DoEvents
    For i = 1 To 2000
      strD = strD & Chr(64 + j) & Format(Hex(i), "00000") & ","
    Next
    strD = Left(strD, Len(strD) - 1)
    Print #intF, strD
    strD = ""
  Next
  Close #intF
End Sub

シート分割
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, ",")
  
  ' 配列数を256で割ってシート数を計算
  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)
  ’訂正してください ↓
  ReDim vA(1 To eLN, 255)
  
  ' シートの中にセルの配列を組み込む
  For i = 1 To CLM
    vX(i) = vA
  Next
  
  ’一行目のデータをセット
  ’こちらではエラーにならないのですが
  ' 貴方のデータがどのようなものか分かりませんので
  ' 下記の説明でデバッグしてみて下さい。
  j = 1
  For i = 0 To UBound(vD)
    Debug.Print i       ' を追加してエラー時にチェック
    ’vX(Int(i / 256) + 1)はvX(1)です。
    '(j, i Mod 256)は(1, i Mod 256)のはずです。
    vX(Int(i / 256) + 1)(j, i Mod 256) = vD(i)
  Next
  
  '本処理 2行目以降の処理
  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
0 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 お礼

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