|
返信ありがとうございます。さきほどのソースで読み込みを行いファイル名等の
変更も行ったあと実行したのですが、なぜか
j = 1
For i = 0 To UBound(vD)
vX(Int(i / 256) + 1)(j, i Mod 256) = vD(i)
Next
の部分でエラーが起こります。インデックスが有効範囲にありませんというエラーなのですが何が原因でしょうか?たびたび申し訳ありませんが回答頂けるとうれしいです。
▼Yuki さん:
>▼アヒルペンギン さん:
>>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
|
|