トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Excel:VBA:UTF-8/LFのファイルを読み込む のバックアップ(No.1)


Excel:VBA:UTF-8/LFのファイルを読み込む

ハマったのでごみごみコメントを書いたコードを残します。

まあ、端的には、「ADODB.Stream」ってやつを使えばOKです。

Sub loadLogFile(ByRef fileName As Variant)
    
  Dim rowNo As Integer
  Dim readString As String
  Dim st As Object

'  ADODB.Streamの参照URL
'  http://msdn.microsoft.com/ja-jp/library/cc364272.aspx
'  http://msdn.microsoft.com/ja-jp/library/cc364273.aspx
  
  Set st = CreateObject("ADODB.Stream") 'ADODB.Stream生成
  
'  StreamTypeEnumの仕様
' adTypeBinary    1   バイナリ データを表します。
'  adTypeText  2   既定値です。Charset で指定された文字セットにあるテキスト データを表します。
'  【参照URL】http://msdn.microsoft.com/ja-jp/library/cc389884.aspx

  st.Type = 2  'オブジェクトに保存するデータの種類を文字列型に指定する

'  【参照URL】http://msdn.microsoft.com/ja-jp/library/cc364313.aspx
  st.Charset = "utf-8"  '文字コード(Shift_JIS, Unicodeなど)

'  LineSeparatorsEnumの仕様
'  adCR    13  改行復帰を示します。
'  adCRLF  -1  既定値です。改行復帰行送りを示します。
'  adLF    10  行送りを示します。
'  【参照URL】http://msdn.microsoft.com/ja-jp/library/cc389826.aspx
  st.LineSeparator = 10 '改行LF(10)
  
  st.Open         'Streamのオープン
  st.LoadFromFile (fileName)  'ファイル読み込み
  
  
  rowNo = 5
  'ファイルの終りまでループ
  Do While Not st.EOS
    rowNo = rowNo + 1
'  ReadTextの仕様
' 引数、読み込む文字列、もしくはStreamReadEnumの値を指定
' StreamReadEnumの仕様
' adReadAll   -1  既定値です。現在の位置から EOS マーカー方向に、すべてのバイトをストリームから読み取ります。これは、バイナリ ストリームに唯一有効な StreamReadEnum 値です (Type は adTypeBinary)。
' adReadLine  -2  ストリームから次の行を読み取ります (LineSeparator プロパティで指定)。
' 【参照URL】http://msdn.microsoft.com/ja-jp/library/cc364207.aspx
    
    readString = st.ReadText(-2) 'テキストを1行読み込む。
        
    Cells(rowNo, 2).Value = readString   '読み込んだ文字列をセルにセットする
  Loop
 
  st.Close  'Streamのクローズ
  Set st = Nothing

End Sub