トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

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

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

*Excel:VBA:UTF-8/LFのファイルを読み込む [#w6171a97]

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

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

***コメント無し版 [#w0aed87f]
コメント無しだとすっきりです。

 Sub loadLogFile2(ByRef fileName As Variant)
     
   Dim rowNo As Integer
   Dim readString As String
   Dim st As Object
 
   Set st = CreateObject("ADODB.Stream") 'ADODB.Stream生成
   st.Type = 2  'オブジェクトに保存するデータの種類を文字列型に指定する
   st.Charset = "utf-8"  '文字コード(Shift_JIS, Unicodeなど)
   st.LineSeparator = 10 '改行LF(10)
   st.Open         'Streamのオープン
   st.LoadFromFile (fileName)  'ファイル読み込み
   
   
   rowNo = 5
   Do While Not st.EOS
     rowNo = rowNo + 1
     readString = st.ReadText(-2) 'テキストを1行読み込む。
     Cells(rowNo, 2).Value = readString   '読み込んだ文字列をセルにセットする
   Loop
  
   st.Close  'Streamのクローズ
   Set st = Nothing
 
 End Sub



***コメントあり版 [#z4249231]

結構コメントを書きましたw

 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