masato日記

やっていきます

Excel VBA テキストファイルを読み込んでワークシートの一致する文字列をマーキングする

何かリストを何らかの条件で分別していて、途中で該当するセルだけをマーキングしたいというニーズがある、と思う。
とくにだれか他の人に作業経過を連絡したいときなどだ。

テキストエディタで作業して、中間ファイルを得たとする。 この場合はテキストファイルをExcelに読み込んでから、マーキング処理をするという具合になる。

テキストの文字コードがつまずきポイントだ。
ふつうテキストはUTF-8なので、VBAでもそれに応じた読み取り方をする必要がある。

Function ReadUTF8Text(fileFullPath As String) As Variant
    Dim buf As String
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile fileFullPath
        buf = .ReadText
        .Close
    End With
    
    ReadUTF8Text = Split(buf, vbCrLf)
End Function

ADODB.StreamのCharsetプロパティで読み取るテキストファイルの文字コードを指定できる。
1行ずつ読んでString型変数に入れ、最後まで終わったらVariant型にvbCrLrをデリミタとしてSplitしてやると、1行ごとに要素が分かれた配列が得られる。

あとは、for eachループでまわせば好きに処理できる。