大体でIT

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

大体でIT

Excel VBAでBOM付きUTF-8形式のテキストファイルからデータの読み込みと出力する方法をまとめました。BOM付きUTF-8はWindows10のメモ帳で以前デフォルトになっていた文字コードです。

はじめに

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

BOM付きUTF-8は以前、Windows10のメモ帳でデフォルトとして使われていました。

なのでまだBOM付きUTF-8で保存されたテキストファイルを扱う場面があるかと思います。

その場合に今回ご紹介するBOM付きUTF-8のテキストファイルの操作が使えます。

この記事で紹介すること

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

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

目次

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

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

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

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

'BOM付きUTF-8形式でテキストファイルへ出力
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .WriteText buf, 0
    .SaveToFile FilePath, 2
    .Close
End With

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

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

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

読み込む

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

'BOM付きUTF-8形式のテキストファイル読み込み
Sub TEST1()
    
    'ファイルパス指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\TEST.txt"
    
    'BOM付きUTF-8のテキストファイルを読み込みます
    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

ファイルパス『.LoadFromFile FilePath』のところと読み込むデータ『buf = .ReadText』のところだけ変えればできます。

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

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

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

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

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

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

読み込んだ結果

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

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

文字化けしていません。

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

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

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

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

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

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

'BOM付きUTF-8形式のテキストファイル読み込み(改行区切り+コンマ区切り)
Sub TEST2()
        
    'ファイルパスの指定
    Dim FilePath
    FilePath = ThisWorkbook.Path & "\TEST.txt"
    
    'BOM付きUTF-8ファイルの読み込み
    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

ちょっと長いです。

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

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

というような流れです。

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

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

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

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

読み込んだ結果です。

読み込んだ結果

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

読み込むBOM付き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形式テキストファイルへ出力

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

出力する

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

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

出力するデータ『.WriteText buf, 0』のところとファイルパス『.SaveToFile FilePath, 2』のところだけ書き換えれば使えます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

'BOM付き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付きUTF-8形式でテキストファイルへ出力
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .WriteText buf, 0
        .SaveToFile FilePath, 2
        .Close
    End With
    
End Sub

少し長いです。

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

  • ①セルのデータを取得する
  • ②コンマ区切りでデータをまとめる
  • ③改行区切りでデータをまとめる
  • ④BOM付き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つのデータにまとめることができました。

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

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

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

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

'BOM付きUTF-8形式でテキストファイルへ出力
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .WriteText buf, 0
    .SaveToFile FilePath, 2
    .Close
End With

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

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

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

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

おわりに

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

BOM付きUTF-8は以前、Windows10のメモ帳でデフォルトとして使われていました。

なのでまだBOM付きUTF-8で保存されたテキストファイルを扱う場面があるかと思います。

その場合に今回ご紹介したBOM付きUTF-8のテキストファイルの操作が使えます。

最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す