大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAでUTF-8形式のテキストファイルからデータの読み込みと出力する方法をまとめました。UTF-8はテキストデータのスタンダードになっていますのでVBAでテキストファイルを操作したい場合に参考になるかと思います。

はじめに

この記事ではUTF-8形式のテキストファイルを読み込む方法と出力する方法をご紹介します。

UTF-8はBOMなしの文字コードです。

Windows10のメモ帳でもデフォルトの形式がUTF-8となっています。

なのでExcel VBAを使ってテキストファイルを操作したいといった場合に参考になるかと思います。

私はHTMLファイルをUTF-8形式で作成していますのでHTMLファイルの編集にテキストファイルの読み込みと出力するVBAコードを使っています。

この記事で紹介すること

  • UTF-8形式のテキストファイルを読み込む
  • UTF-8形式のテキストファイルへ出力する

目次から見たい項目へ移動すると便利ですよ。

目次

UTF-8形式テキストファイルの読み込み・出力のまとめ

最初にUTF-8形式のテキストファイルの読み込みと出力のVBAコードを記載しておきます。

この内容でわかればこの記事を最後まで読む必要はありません。

'UTF-8形式のテキストファイル読み込み
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .LoadFromFile FilePath 'ファイルパス
    buf = .ReadText '読み込むデータ
    .Close
End With
'BOMを削除する
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .WriteText buf
    .Position = 0
    .Type = 1
    .Position = 3
    byteTmp = .Read
    .Close
End With

'UTF-8でテキストファイルへ出力する
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .LineSeparator = 10
    .Type = 1
    .Open
    .Write byteTmp
    .SetEOS
    .SaveToFile FilePath, 2
    .Close
End With

UTF-8形式のテキストファイルの読み込みと出力のVBAコードになります。

VBAでUTF-8形式テキストファイルの読み込み

まずはExcel VBAでUTF-8形式のテキストファイルを読み込む方法について説明します。

読み込む

UTF-8形式のファイルを読み込むVBAコードはこちらになります。

'UTF-8形式のテキストファイル読み込み
Sub TEST1()
    
    'ファイルパス指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\TEST.txt"
    
    'テキストファイルを読み込みます
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile FilePath 'ファイルパス
        buf = .ReadText '読み込むデータ
        .Close
    End With
    
    'データ貼り付け
    With ActiveSheet
        .Cells(1, 1) = buf
    End With
                
End Sub

テキストファイルを読み込むVBAコードで、ファイルパス『.LoadFromFile FilePath』のところと読み込むデータ『buf = .ReadText』のところが重要です。

そのほかはあまり気にしなくてもいいです。

ではVBAコードを実行してUTF-8形式のテキストファイルを読み込んでみます。

読み込みたいUTF-8形式のテキストファイルの内容はこちらになります。

読み込むUTF-8形式のテキストファイル

UTF-8形式のテキストファイル

読み込んだ結果がこちらになります。

読み込んだ結果

UTF-8形式のテキストファイルを読み込んだ結果

エクセルにUTF-8形式のテキストファイルを読み込むことができました。

文字化けしていません。

ただ、1つのセルに全データが読み込まれた結果となっています。

セル1つに1つのデータを入力したい場合は、VBAのテクニックを使う必要があります。

この後の説明はテキストファイルの取得からは少し脱線します。

とりあえずUTF-8形式のテキストファイルを読み込めればあとの説明はいいという方は読む必要はありません。

改行・コンマ区切りにする

エクセルに改行区切り+コンマ区切りでUTF-8形式のテキストファイルを読み込むVBAコードはこちらになります。

'UTF-8形式のテキストファイル読み込み(改行区切り+コンマ区切り)
Sub TEST2()

    'ファイルパス指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\TEST.txt"
    
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile FilePath 'ファイルパス
        buf = .ReadText '読み込むデータ
        .Close
    End With
    
    '改行毎にデータを分ける
    Dim A
    A = Split(buf, vbLf)
    
    Dim B
    ReDim B(1 To 100, 1 To 100) As Variant
    
    'コンマ毎にデータを分けてデータを保存する
    Dim C
    For i = 0 To UBound(A, 1)
        C = Split(A(i), ",")
        For j = 0 To UBound(C, 1)
            B(i + 1, j + 1) = C(j)
        Next
    Next
    
    'データ貼り付け
    With ActiveSheet
        .Range(.Cells(1, 1), .Cells(1, 1).Resize(UBound(B, 1), UBound(B, 2))) = B
    End With
                
End Sub

ちょっと長いです。

手順は次のようになります。

  • ①UTF-8形式でテキストファイルを読み込む
  • ②読み込んだデータを改行区切りで分ける
  • ③さらにコンマ区切りでデータを分ける
  • ④セルにデータを出力する

というような流れです。

まずはUTF-8形式のテキストファイルの読み込みです。

手順①UTF-8形式テキストファイルの読み込み

'ファイルパスの指定
Dim FilePath
FilePath = ThisWorkbook.Path & "\TEST.txt"

With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .LoadFromFile FilePath 'ファイルパス
    buf = .ReadText '読み込むデータ
    .Close
End With

読み込んだ結果です。

読み込んだ結果

読み込むUTF-8形式のテキストファイルです。

読み込むUTF-8形式のテキストファイル

読み込んだ結果です。

読み込んだ結果

次に1まとまりのデータを改行区切りでデータをわけます。

改行区切りでデータを分けるVBAコードはこちらになります。

②改行区切りにデータを分ける

'改行毎にデータを分ける
Dim A
A = Split(buf, vbLf)

改行区切りでデータを分けた結果はこちらになります。

改行区切りでデータを分けた結果

改行区切りでデータを分けた結果

改行区切り毎にデータを分けることができました。

つづいてコンマ区切りでデータを分けます。

コンマ区切りでデータを分けるVBAコードはこちらになります。

③コンマ区切りにデータを分ける

Dim B
ReDim B(1 To 100, 1 To 100) As Variant

'コンマ毎にデータを分けてデータを保存する
Dim C
For i = 0 To UBound(A, 1)
    C = Split(A(i), ",")
    For j = 0 To UBound(C, 1)
        B(i + 1, j + 1) = C(j)
    Next
Next

コンマ区切りでデータを分けたら後はシートへデータを貼り付けて終了です。

シートへデータを貼り付けるVBAコードはこちらです。

④セルにデータの貼付け

'データ貼り付け
With ActiveSheet
    .Range(.Cells(1, 1), .Cells(1, 1).Resize(UBound(B, 1), UBound(B, 2))) = B
End With

貼付けた結果を見てみます。

改行区切り+コンマ区切りでデータを分けた結果

改行区切り+コンマ区切りでデータを分けた結果

これでエクセルのセルへデータを1つずつ入力することができます。

VBAでUTF-8形式テキストファイルへ出力

UTF-8形式でテキストファイルへ出力するVBAコードをご紹介します。

出力する

UTF-8形式でテキストファイルへ出力するVBAコードはこちらになります。

'UTF-8形式でテキストファイルへ出力
Sub TEST3()
    
    'テキストファイルへ出力したいデータを取得する
    buf = ActiveSheet.Cells(1, 1)
    
    '出力するファイルパスを設定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\TEST.txt"
    
    'BOMを削除する
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .WriteText buf
        .Position = 0
        .Type = 1
        .Position = 3
        byteTmp = .Read
        .Close
    End With
    
    'UTF-8でテキストファイルへ出力する
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .LineSeparator = 10
        .Type = 1
        .Open
        .Write byteTmp
        .SetEOS
        .SaveToFile FilePath, 2
        .Close
    End With
    
End Sub

テキストファイルの出力のVBAで、出力するデータ『.WriteText buf, 0』のところとファイルパス『.SaveToFile FilePath, 2』のところが重要です。

そのほかはあまり気にする必要はありません。

ではVBAコードを実行してみます。

UTF-8形式でテキストファイルへ出力したいエクセルデータはこちらです。

出力したいエクセルデータ

出力したいエクセルデータ

UTF-8形式でテキストファイルへ出力してみます。

UTF-8形式でテキストファイルへ出力した結果

UTF-8形式でテキストファイルへ出力した結果

テキストファイルへ出力することができました。

とりあえずUTF-8形式でテキストファイルへ出力するにはこれだけでできます。

1つのセルに複数データをまとめる方法について知りたいという方は次の項目が参考になるかと思います。

これもVBAのテクニックで、UTF-8形式でテキストファイルへ出力する内容からは少し脱線します。

1つのデータにまとめる方法はわかるという方は読む必要はありません。

セルデータをまとめて出力

エクセルデータの複数行で複数列のデータをUTF-8形式でテキストファイルへ出力するVBAコードはこちらになります。

'UTF-8形式でテキストファイルへ出力(複数行列のセルをまとめて出力)
Sub TEST4()
    
    'テキストファイルへ出力したいデータを取得する
    Dim A
    With ActiveSheet
        A = .Range(.Cells(1, 1), .Cells(13, 2))
    End With
    
    'コンマ区切りをまとめて改行区切りのデータを作成します
    Dim B
    ReDim B(1 To UBound(A, 1)) As Variant
    For i = 1 To UBound(A, 1)
        B(i) = A(i, 1) & "," & A(i, 2)
    Next
    
    '1つのデータにする
    buf = ""
    For i = 1 To UBound(B, 1)
        '最終行の以外の場合
        If i <> UBound(B, 1) Then
            buf = buf & B(i) & vbLf '最後に改行をつけます
        '最終行の場合
        ElseIf i = UBound(B, 1) Then
            buf = buf & B(i) '最終行は改行しません
        End If
    Next
    
    '出力するファイルパスを設定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\TEST.txt"
    
    'BOMを削除する
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .WriteText buf
        .Position = 0
        .Type = 1
        .Position = 3
        byteTmp = .Read
        .Close
    End With
    
    'UTF-8でテキストファイルへ出力する
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .LineSeparator = 10
        .Type = 1
        .Open
        .Write byteTmp
        .SetEOS
        .SaveToFile FilePath, 2
        .Close
    End With
    
End Sub

少し長いです。

手順はこちらになります。

  • ①セルのデータを取得する
  • ②コンマ区切りでデータをまとめる
  • ③改行区切りでデータをまとめる
  • ④UTF-8形式でテキストファイルに出力

という流れです。

①セルのデータを取得する

最初にエクセルのデータを取得します。

取得するVBAコードはこちらです。

'テキストファイルへ出力したいデータを取得する
Dim A
With ActiveSheet
    A = .Range(.Cells(1, 1), .Cells(13, 2))
End With

取得したデータはこちらになります。

取得したセルデータ

取得したセルデータ

これを1つのデータへまとめていきます。

まずは列のデータをコンマ区切りでまとめます。

コンマ区切りでデータをまとめるVBAコードはこちらになります。

②コンマ区切りでデータをまとめます

'コンマ区切りをまとめて改行区切りのデータを作成します
Dim B
ReDim B(1 To UBound(A, 1)) As Variant
For i = 1 To UBound(A, 1)
    B(i) = A(i, 1) & "," & A(i, 2)
Next

『ReDim B(1 To UBound(A, 1)) As Variant』でコンマ区切りのデータを保存する配列を作成します。

『B(i) = A(i, 1) & "," & A(i, 2)』で2列のデータをコンマ区切りで1つにします。

コンマ区切りでまとめたデータはこちらになります。

コンマ区切りでまとめたデータ

コンマ区切りでまとめたデータ

つづいて、これを改行区切りで1つのデータにまとめていきます。

改行区切りでまとめるVBAコードはこちらになります。

③改行区切りで1つのデータにまとめる

'1つのデータにする
buf = ""
For i = 1 To UBound(B, 1)
    '最終行の以外の場合
    If i <> UBound(B, 1) Then
        buf = buf & B(i) & vbLf '最後に改行をつけます
    '最終行の場合
    ElseIf i = UBound(B, 1) Then
        buf = buf & B(i) '最終行は改行しません
    End If
Next

『buf = buf & B(i) & vbLf』で1行ずつのデータの最後に改行コード『vblf』をつけてbufに保存していきます。

最終行には改行は必要ありませんので、最終行だけ『buf = buf & B(i)』としてデータのみをbufに保存します。

このVBAコードで1つにまとめた結果がこちらです。

1データにまとめた結果

1データにまとめた結果

1つのデータにまとめることができました。

あとは『BOM』を削除して、『With CreateObject("ADODB.Stream")』を使ってUTF-8形式でテキストファイルへ出力して終了です。

UTF-8形式でテキストファイルへ出力するVBAコードです。

④UTF-8形式でテキストファイルへ出力

'出力するファイルパスを設定
Dim FilePath
FilePath = ThisWorkbook.Path & "\TEST.txt"

'BOMを削除する
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .WriteText buf
    .Position = 0
    .Type = 1
    .Position = 3
    byteTmp = .Read
    .Close
End With

'UTF-8でテキストファイルへ出力する
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .LineSeparator = 10
    .Type = 1
    .Open
    .Write byteTmp
    .SetEOS
    .SaveToFile FilePath, 2
    .Close
End With

テキストファイルへ出力した結果がこちらです。

UTF-8形式でテキストファイルへ出力した結果

UTF-8形式でテキストファイルへ出力した結果

テキストファイルへエクセルのデータを出力できています。

おわりに

この記事ではUTF-8形式のテキストファイルを読み込む方法と出力する方法をご紹介しました。

UTF-8はBOMなしの文字コードです。

Windows10のメモ帳でもデフォルトの形式がUTF-8となっています。

なのでExcel VBAを使ってテキストファイルを操作したいといった場合に参考になるかと思います。

私はHTMLファイルをUTF-8形式で作成していますのでHTMLファイルの編集にテキストファイルの読み込みと出力するVBAコードを使っています。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す