Excel:VBA:UTF-8/LFのファイルを読み込む
Last-modified: 2013-11-28 (木) 15:47:02 (3948d)
Top / Excel:VBA:UTF-8/LFのファイルを読み込む
Excel:VBA:UTF-8/LFのファイルを読み込む †
ハマったのでごみごみコメントを書いたコードを残します。
まあ、端的には、「ADODB.Stream」ってやつを使えばOKです。
コメント無し版 †
コメント無しだとすっきりです。
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
コメントあり版 †
結構コメントを書きました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