|
後もう1つ思い出した
もし、読み込むCSVがユニックス系の改行コードがLfの場合
Openステートメントで読み込もうとすると、全てのデータを変数に読み込んでしまう為
上手く行きません(Openステートメントでは、改行コードは、CrLf、Crだけ)
この場合、FSOを使って「Sub CSVRead」を以下の様にします
Private Sub CSVRead(ByVal strFileName As String, _
ByRef rngWrite As Range, _
Optional ByRef lngRow As Long = 1, _
Optional strDelim As String = ",")
Const ForReading = 1
Dim vntField As Variant
Dim strBuff As String
Dim blnMulti As Boolean
Dim strRec As String
Dim objFso As Object
Dim objFileStr As Object
'FSOのオブジェクトを取得
Set objFso = CreateObject("Scripting.FileSystemObject")
'指定ファイルを読み込みモードでOpen
Set objFileStr = objFso.OpenTextFile(strFileName, ForReading)
With objFileStr
Do Until .AtEndOfStream
'ファイルから1行読み込み
strBuff = .ReadLine
'論理レコードに物理レコードを追加
strRec = strRec & strBuff
'論理レコードをフィールドに分割
vntField = SplitCsv(strRec, strDelim, , , blnMulti)
'フィールド内で改行が有る場合
If Not blnMulti Then
With rngWrite.Offset(lngRow)
With .Resize(, UBound(vntField) + 1)
'出力範囲を文字列に設定
' .NumberFormat = "@"
'データを出力
.Value = vntField
End With
End With
'出力行をインクリメント
lngRow = lngRow + 1
strRec = ""
Else
'改行が有った場合、単純に連結する時はElse節を削除
'セル内改行として残す場合
strRec = strRec & vbLf
End If
Loop
.Close
End With
Set objFileStr = Nothing
Set objFso = Nothing
End Sub
|
|