Page 47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼改行コードがLFのデータを行単位で読み込みたい ゆー 02/9/6(金) 20:06 ┗Re:余り上手い物では有りませんが Hirofumi 02/9/7(土) 13:10 ┗ありがとうございました ゆー 02/9/9(月) 10:13 ─────────────────────────────────────── ■題名 : 改行コードがLFのデータを行単位で読み込みたい ■名前 : ゆー ■日付 : 02/9/6(金) 20:06 -------------------------------------------------------------------------
改行コードがLFのテキストファイルをExcelから読み込みたいのですが、 Input関数だとCR+LF区切りで読み取るので行単位で読み取ることができません。 このテキストを行単位で読み取って、シートに書きこんでいきたいのですが、 何かよい方法などあるのですかね・・・ テキストをCR+LFに変換してから行わないとExcelからでは 厳しいのでしょうか ご存知の方がいましたら、是非ご教授ください。 |
他にもっと善い方法があるかもしれませんが こんな方法でも読めると思います 尚、lngReadLen = 144と有りますが これはバファとするバイト配列のサイズで、 数字を替えると読み込み速度が幾らか変わります また、LineReadBinary の第二引数を省略すればvbLfを改行コードとしますが vbCrLf、vbCr他を指定する事も出来ます Public Sub LineBinaryRead() Dim intCalc As Integer With Application .ScreenUpdating = False intCalc = .Calculation .Calculation = xlCalculationManual End With LineReadBinary ThisWorkbook.Path & "\" & "TestFile.csv" With Application .Calculation = intCalc .Calculate .ScreenUpdating = True End With End Sub Public Sub LineReadBinary(strFileName As String, _ Optional ByVal strRet As String = vbLf) Dim i As Long Dim dfn As Integer Dim bytBuf() As Byte Dim strBuf As String Dim strRec As String Dim lngLPos As Long Dim intRetLen As Integer Dim lngReadLen As Long Dim lngSurplus As Long Dim lngFileSize As Long lngFileSize = FileLen(strFileName) If lngFileSize = 0 Then Exit Sub End If lngReadLen = 144 lngSurplus = lngFileSize Mod lngReadLen strRet = StrConv(strRet, vbFromUnicode) intRetLen = LenB(strRet) i = 1 ReDim bytBuf(1 To lngReadLen) dfn = FreeFile Open strFileName For Binary As dfn Do Until LOF(dfn) <= Loc(dfn) If LOF(dfn) - Loc(dfn) <= lngReadLen Then ReDim bytBuf(1 To (LOF(dfn) - Loc(dfn))) End If Get #dfn, , bytBuf strBuf = strBuf & CStr(bytBuf) lngLPos = InStrB(1, strBuf, strRet) Do Until lngLPos = 0 If lngLPos > 0 Then strRec = strRec & LeftB(strBuf, lngLPos - 1) strBuf = MidB(strBuf, lngLPos + intRetLen) Else If LOF(dfn) <= Loc(dfn) Then strRec = strRec & strBuf End If End If If lngLPos > 0 Or LOF(dfn) <= Loc(dfn) Then Cells(i, 1).Value = StrConv(strRec, vbUnicode) i = i + 1 strRec = "" End If lngLPos = InStrB(1, strBuf, strRet) Loop Loop Close dfn End Sub |
Hirofumiさん 丁寧なご回答ありがとうございました。 早速この方法でやってみます。 どうもありがとうございました。 |