大体でIT

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

大体でIT

Excel VBAを使って、UTF-8形式のテキストファイルの読み込みと出力をするには、「"ADODB.Stream"」を使います。UTF-8形式はWindowsのメモ帳でデフォルトですので、UTF-8形式のテキストファイルを操作する方法について、マスターしていきましょう。

はじめに

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

UTF-8はBOMなしの文字コードで、Windows10や11のメモ帳ではデフォルトの形式です。

使うVBAコードは、「"ADODB.Stream"」というものを使います。

UTF-8形式は、出力する際に、BOMを削除する必要があるので、ちょっと工夫が必要になります。

では、UTF-8形式のテキストファイルを読み込む方法と、出力する方法について、解説していきます。

この記事を読むメリット

  • UTF-8形式でテキストファイルの読み込みと出力する方法がわかります。

本記事の内容を動画でまとめています

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

目次

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

UTF-8形式テキストファイルの読み込み・出力のVBAコードについて、まとめています。

VBAコードまとめ

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

VBAコードだけ確認したい場合に、ご活用ください。

Dim A, B

'ファイルパスを指定
A = ThisWorkbook.Path & "\TEST.txt"

'読み込み
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .LoadFromFile A 'ファイルに接続
    B = .ReadText 'データを読み込む
    .Close
End With
    
'出力
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    'ファイルに書き込み
    .WriteText Cells(1, 1) & "," & Cells(1, 2), 1
    'BOMを削除する
    .Position = 0
    .Type = 1
    .Position = 3
    B = .Read
    .Close
    .Open
    .Write B
    '保存するファイルを指定
    .SaveToFile A, 2
    .Close
End With

では、解説していきます。

UTF-8形式のテキストファイルを操作したい

やりたい内容としては、UTF-8形式のテキストファイルを操作したい、ということなります。

UTF-8形式のファイルを操作したい

UTF-8形式でテキストファイルを操作します

Windowsのメモ帳のデフォルトの形式もUTF-8形式です。

メモ帳のデフォルトはUTF-8形式

Windowsのメモ帳のデフォルトの形式もUTF-8形式です

なので、テキストファイルを操作する際には、「UTF-8」形式での操作が必要なっていいきます。

では、UTF-8形式での読み込みと出力について、解説していきます。

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

VBAで、UTF-8形式テキストファイルの読み込みをしてみます。

読み込む

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

テキストファイルを読み込む

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

まずは、UTF-8形式のデータをすべて読み込みをしてみます。

データを読み込む

データを読み込むだけのVBAコードになります。

「CreateObject("ADODB.Stream")」を使って、テキストファイルを開いて読み込む、という感じです。

Sub TEST1()
    
    Dim A, B
    
    'ファイルパス指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    'テキストファイルを読み込みます。
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile A 'ファイルに接続
        B = .ReadText 'データを読み込む
        .Close
    End With
    
    'セルに入力
    Cells(1, 1) = B
                
End Sub

こちらのUTF-8形式のテキストファイルを読み込んでみます。

UTF-8形式のテキストファイルを用意しました

では、実行してみます。

データを読み込むことができたけど、1つデータとなっています

データを読み込むことができました。

ただ、1つデータとなっているので、エクセルで扱いづらいです。

まずは、改行区切りで分割してみます。

改行区切りで分割する

UTF-8形式で、テキストファイルから値を読み込んで、「改行区切り」で分割してみます。

文字列を分割する際は、「Split」を使います。

改行毎に分割したいので、区切り文字は「vbCrLf」とします。

Sub TEST2()
        
    Dim A, B, C, D
    
    'ファイルパスの指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile A 'ファイルに接続
        B = .ReadText 'データを読み込む
        .Close
    End With
    
    '改行毎にデータを分割
    C = Split(B, vbCrLf)
    
    'セルに入力
    For i = 0 To 7
        Cells(i + 1, 1) = C(i)
    Next
                    
End Sub

次のテキストファイルからデータを読み込んでみます。

読み込むテキストファイル

テキストファイルからデータを読み込んでみます

では、実行してみます。

改行区切りで分割できた

テキストファイルからデータを読み込んで、改行毎に分割してセルに入力できました

テキストファイルからデータを読み込んで、改行毎に分割してセルに入力できました。

ただ、1列になっているので、まだ扱いづらいです。

さらに、コンマ区切りで分割してみます。

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

改行区切りと、コンマ区切りで、分割するVBAコードになります。

先ほどと同じように、「Split」を使います。

「コンマ」毎に分割したいので、区切り文字には、「","」を使います。

Sub TEST3()
        
    Dim A, B, C, D
    
    'ファイルパスの指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile A 'ファイルに接続
        B = .ReadText 'データを読み込み
        .Close
    End With
    
    '改行毎にデータを分ける
    C = Split(B, vbCrLf)
    
    'コンマ毎にデータを分けてデータを保存する
    For i = 0 To 7
        D = Split(C(i), ",") 'コンマ毎に分割する
        'セルに入力
        Cells(i + 1, 1) = D(0)
        Cells(i + 1, 2) = D(1)
    Next
                    
End Sub

次のテキストファイルからデータを読み込んでみます。

読み込むテキストファイル

テキストファイルからデータを読み込んでみます

では、実行してみます。

改行区切り、コンマ区切りで分割できた

テキストファイルからデータを読み込んで、改行毎とコンマ毎に分割してセルに入力できました

テキストファイルからデータを読み込んで、改行毎とコンマ毎に分割してセルに入力できました。

これで、エクセル上でデータが扱いやすくなりました。

こんな感じで、テキストファイルからデータを読み込むことができます。

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

次は、VBAを使って、UTF-8形式でテキストファイルへ出力してみます。

1行だけ出力する

やりたい内容は、テキストファイルに出力したい、ということになります。

テキストファイルに出力したい

テキストファイルにデータを出力してみます

まずは、1行だけを出力してみます。

1行だけ出力してみる

1行だけテキストファイルに出力するVBAコードは、こんな感じになります。

Sub TEST4()
        
    Dim A
    
    'ファイルパスを指定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        'ファイルに書き込み
        .WriteText Cells(1, 1) & "," & Cells(1, 2)
        'ファイルに接続
        .SaveToFile A, 2
        .Close
    End With
        
End Sub

次の表を使って、1行だけテキストファイルに出力してみます。

表を用意しました

では、実行してみます。

1行だけ、テキストファイルに出力できました

1行だけ、テキストファイルに出力できました。

ただ、1行だけでは、使い物にならないので、次はすべての行を出力してみます。

すべての行を出力する

すべての行をテキストファイルに出力するには、「For」を使ってループします。

1行出力したら改行したいので、「.WriteText」の2番目の引数に「1」を入力します。

Sub TEST5()
        
    Dim A
    
    '出力するファイルパスを設定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        'ファイルに書き込み
        For i = 1 To 8
            .WriteText Cells(i, 1) & "," & Cells(i, 2), 1
        Next
        '保存するファイルを指定
        .SaveToFile A, 2
        .Close
    End With
        
End Sub

次の表をテキストファイルに出力してみます。

読み込むテキストファイル

すべての行をテキストファイルに出力してみます

では、実行してみます。

すべての行を出力したい

Forでループして、すべての行をテキストファイルに出力できました

すべての行をテキストファイルに出力できました。

すべての行を出力したい場合は、こんな感じで「For」を使います。

ただ、まだ問題があって、出力したテキストファイルが「BOM付きのUTF-8」になっています。

BOM付きのUTF-8になっている

BOM付きのUTF-8になっています

「UTF-8」形式で出力したい場合は、「BOM」を削除する必要があります。

では、次で「BOM」を削除して出力してみます。

BOMなしのUTF-8にする

「BOM」を削除して、UTF-8形式で出力するVBAコードなります。

「BOM」を削除するVBAコードを追加しています。

Sub TEST6()
        
    Dim A, B
    
    '出力するファイルパスを設定
    A = ThisWorkbook.Path & "\TEST.txt"
    
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        'ファイルに書き込み
        For i = 1 To 8
            .WriteText Cells(i, 1) & "," & Cells(i, 2), 1
        Next
        'BOMを削除する
        .Position = 0
        .Type = 1
        .Position = 3
        B = .Read
        .Close
        .Open
        .Write B
        '保存するファイルを指定
        .SaveToFile A, 2
        .Close
    End With
        
End Sub

次の表をBOM無しのUTF-8形式で出力してみます。

読み込むテキストファイル

BOMなしのUTF-8形式で、テキストファイルに出力してみます

では、実行してみます。

「BOMなし」のUTF-8で出力できた

BOMなしのUTF-8形式で、テキストファイルに出力できました

BOMなしのUTF-8形式で、テキストファイルに出力できました。

こんな感じで、UTF-8形式でテキストファイルに出力することができます。

大量データで読み込んで出力してみる

「CreateObject("ADODB.Stream"」を使って、テキストファイルを操作する方法は、かなり高速です。

大量データで読み込んで出力してみます。

時間を計測してみる

大量データを読み込んで、2倍して、テキストファイルに出力するVBAコードです。

Sub TEST7()
    
    t = Timer
    
    Dim A, B, C, D
    
    'ファイルパス指定
    A = ThisWorkbook.Path & "\TEST1.txt"
    
    'テキストファイルを読み込み
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile A 'ファイルに接続
        B = .ReadText 'データを読み込む
        .Close
    End With
    
    '改行毎に分割
    C = Split(B, vbCrLf)
    
    '空の配列を作成
    ReDim D(100000)
    
    '値を2倍にする
    For i = 0 To 100000
        If i = 0 Then
            D(i) = C(i)
        Else
            D(i) = C(i) * 2
        End If
    Next
    
    'BOMなしUTF-8で出力する
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        'データを書き込み
        For i = 0 To 100000
            .WriteText D(i), 1
        Next
        'BOMを削除する
        .Position = 0
        .Type = 1
        .Position = 3
        B = .Read
        .Close
        .Open
        .Write B
        '保存するファイルを指定
        .SaveToFile A, 2
        .Close
    End With
    
    Debug.Print Timer - t & " 秒"
    
End Sub

100,001行のデータを用意しました。

大量データ

100,001行のデータを用意しました

実行して、みます。

大量データを読み込んで出力

100,001行のデータを読み込んで、2倍して、テキストファイルに出力できました

100,001行のデータを読み込んで、2倍して、テキストファイルに出力できました。

では、かかった時間をみてみます。

かかった時間

かなり高速にテキストファイルの読み込みと、出力ができます

かかった時間は、「0.2秒」となりました。

こんな感じで、「CreateObject("ADODB.Stream")」を使う方法は、かなり高速にテキストファイルの読み込みと、出力ができます。

おわりに

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

UTF-8はBOMなしの文字コードで、Windows10や11のメモ帳ではデフォルトの形式です。

使うVBAコードは、「"ADODB.Stream"」というものを使います。

UTF-8形式は、出力する際に、BOMを削除する必要があるので、ちょっと工夫が必要です。

テキストファイルの操作を、Excel VBAを使って自動化していきましょう。

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す