過去ログ

                                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からでは
厳しいのでしょうか

ご存知の方がいましたら、是非ご教授ください。
 ───────────────────────────────────────  ■題名 : Re:余り上手い物では有りませんが  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 02/9/7(土) 13:10  -------------------------------------------------------------------------
   他にもっと善い方法があるかもしれませんが
こんな方法でも読めると思います
尚、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
 ───────────────────────────────────────  ■題名 : ありがとうございました  ■名前 : ゆー  ■日付 : 02/9/9(月) 10:13  -------------------------------------------------------------------------
   Hirofumiさん

丁寧なご回答ありがとうございました。
早速この方法でやってみます。

どうもありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 47