何年後しのせっかくの回答だったのに、そのままにしてしまうのは残念ですから、私なりの解釈で回答を入れておきます。
VBAのポイントは、
'*ここで、Lf を抜く(Excelのセル内改行-Chr(10))
buf = Replace(buf, vbLf, "")
この部分です。もし、該当するものがありましたら、ここに加えてください。
ここで、ひとつずつ不要コードを抜きますが、vbLf かvbCr のどちらかは残してください。
Clean 関数ですと、改行コードもなくなって一行になってしまいますので、それは使えません。
私の記憶では、Binary でインポートすると、StrConv の変換が必要になるということだったと思いますので、
それを省きました。元のファイル名の末尾に、ファイル名$.csv というのが、変換されたファイルです。
本当は、QueryTablesは、使わなくても出来ますが、ご要望なので、入れておきました。
ただし、ファイルの種類によっては、Cr+Lf で、Lf が落ちてしまい、内容が変わってしまう可能性がありますので、
上手くいかなかったら、その後に、
buf = Replace(buf, vbCr, vbCrLf)
と加えることで、標準改行コードに戻るはずです。考え方は、単純だと思います。
'//
Sub MyAnswer()
Dim fName As String
Dim bkf As String
Dim fNum As Integer
Dim fbk As String
Dim buf As Variant
fName = Application.GetOpenFilename("csvファイル(*.csv),*.csv")
If VarType(fName) = vbBoolean Or fName = "" Then Exit Sub
fbk = Mid(fName, 1, InStrRev(fName, ".") - 1) & "$.csv"
fNum = FreeFile()
Open fName For Input As #fNum
buf = Input(LOF(fNum), #fNum)
Close fNum
'*ここで、Lf を抜く
buf = Replace(buf, vbLf, "")
fNum = FreeFile()
Open fbk For Output As #fNum
Print #fNum, buf
Close #fNum
'Sheet の挿入
With Sheets.Add(After:=Sheets(Sheets.Count))
With .QueryTables.Add(Connection:= _
"TEXT;" & fbk, Destination:=Range("A1"))
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells '上書き設定
.AdjustColumnWidth = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileSpaceDelimiter = True
.TextFileConsecutiveDelimiter = True
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileTabDelimiter = True
.TextFileCommaDelimiter = True
.Refresh BackgroundQuery:=False
.Delete
End With
End With
''Kill fbk 'テンポラリファイルの削除
End Sub
お礼
ありがとうございました。 標準モジュールに上記を貼りつけて、うまく読み込むことができました。 VBAの知識が乏しいので頼ってしまいましたが、これを機に勉強して習得したいと思います。 本当にありがとうございました。