Excel VBA質問箱 IV

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

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


25630 / 76732 ←次へ | 前へ→

【56440】Re:巨大なCSVファイルの読み込みに関して
お礼  アヒルペンギン  - 08/6/17(火) 16:28 -

引用なし
パスワード
   Yukiさんありがとうございます。
正常に動作致しました。改行されていなかったのが原因だったようです。
1行目の項目だけが入力してある状態で実行していた為実行できなかった
ようです。テストデータまで公開して頂き感謝致します。まさにこの様な
動作を期待していました。本当にありがとうございました^−^


▼Yuki さん:
>▼アヒルペンギン さん:
>貴方のデータが分からないのでチョット分かりません。
>テストに使用したデータ作成は
>
>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

2 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 お礼

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