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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です