UTF-8のテキストファイル操作【ExcelVBA】
ADODB.Streamを使用してテキストファイルの読み込みをしてExcelにデータを入れる、セルからデータを取得してテキストに書き込むの2点
ストリーム データの流れ Streamクラス メモリやデータ等入出力ができるもの
ライブラリの参照設定 Microsoft ActiveX Data Objects 〇.〇 Libraryを行いADODB.Streamクラスを使用する
→テキストファイルへのアクセス機能等がある
■Charsetプロパティ 指定した文字セットでテキストデータが格納される 文字コードを指定 ※既定値はUnicode
■Openメソッド Streamデータを開く
■Typeプロパティ データの種類を指定 adTypeBinary バイナリデータ adTypeText テキストデータ
■LoadFromFileメソッド ファイルの内容をStreamに読み込み 引数FileName 読み込むファイルの名前を指定
■ReadTextメソッド 指定された文字数を読み取る 引数NumChars ファイルから読み取る文字数を指定 adReadAll → 末尾まで読み込む(既定値) adReadLine → 1行分読み込む
■Closeメソッド Streamデータを閉じる
■SkipLineメソッド 実行するたびに1行分読み込み位置をスキップ
■EOSプロパティ 読み込み位置がEndOfStream(最後)に到達しているかどうかを取得
TRUE 最後まで読み込み位置がいっている
FALSE 未達
■WriteTextメソッド 指定したテキスト文字列を書き込む
引数 Data 書き込むテキストが格納された文字列を指定
Options 文字列の後に、行区切りを追加するかどうか adWriteLine 区切り文字を追加する
■SaveToFileメソッド ファイルに保存する 引数FileNameにファイル名
引数 SaveOptions 保存方法
1 adSaveCreateNotExist→ファイルがない場合新規ファイルを作成(既にファイルがある場合エラー)
2 adSaveCreateOverWrite→ない場合新規ファイルを作成ある場合上書き
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際に使用したサンプルコード
Option Explicit
Public Sub Sample()
'変数でStream機能を使用する準備
Dim 変数 As New ADODB.Stream
With 変数
'文字コードを指定
.Charset = "UTF-8"
'開く
.Open
'扱うファイルの種類を指定(テキストの場合)
.Type = adTypeText
'指定したファイルの内容をStreamに読み込み
.LoadFromFile Filename:=ThisWorkbook.Path & "\sample.txt"
Do Until .EOS
'指定された文字数を読み取る
MsgBox .ReadText(numchars:=adReadLine)
Loop
'閉じる
.Close
End With
End Sub
Option Explicit
Public Sub Sample()
'変数でStream機能を使用する準備
Dim 変数 As New ADODB.Stream
With 変数
'文字コードを指定
.Charset = "UTF-8"
'開く
.Open
'扱うファイルの種類を指定(テキストの場合)
.Type = adTypeText
'指定したファイルの内容をStreamに読み込み
.LoadFromFile Filename:=ThisWorkbook.Path & "\sample.txt"
Dim i As Integer
Dim 配列() As String
Range("B91").Select
Do Until .EOS
'指定された文字数を読み取る
配列 = Split(.ReadText(numchars:=adReadLine), ",")
ActiveCell.Resize(1, UBound(配列, 1) + 1).Value = 配列
ActiveCell.Offset(1).Select
Loop
'閉じる
.Close
End With
End Sub
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Public Sub Sample()
'変数でADODBのStreamクラスを使用する準備
Dim 変数 As New ADODB.Stream
'固定配列で宣言
Dim 配列(2) As String
With 変数
'文字コードを指定
.Charset = "UTF-8"
'開く
.Open
'データの種類を指定
.Type = adTypeText
Dim i As Integer
For i = 85 To 87
'配列にセルの値を1つずつ入れていく
配列(0) = Cells(i, 2).Value
配列(1) = Cells(i, 3).Value
配列(2) = Cells(i, 4).Value
'書き込みを行う
.WriteText Data:=Join(配列, ","), Options:=adWriteLine
Next
'ファイルに保存する
.SaveToFile ThisWorkbook.Path & "\test.txt", adSaveCreateOverWrite
'閉じる
.Close
End With
End Sub