'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
'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形式のテキストファイルです。
読み込んだ結果です。
次に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
'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』でコンマ区切りのデータを保存する配列を作成します。
'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