VBAサンプル集
UTF-8でCSVの読み書き(ADODB.Stream)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2017-03-16

UTF-8でCSVの読み書き(ADODB.Stream)


VBAでUTF-8を扱う為には、ADODB.Streamを使う必要があります。


以下のコードを使用するには、

参照設定で、「Microsoft ActiveX Data Objects 2.8 Library」にチェックを付けて下さい。

または、

Dim adoSt As New ADODB.Stream
ここを
Dim adoSt As Object
Set adoSt = CreateObject(ADODB.Stream)

として下さい。

私としては、めったに使う事もないので、

自分の覚書として掲載ししました。


アクティブシートの内容をUTF-8でCSV出力します



Sub sample1()
  Dim i As Long
  Dim j As Long
  Dim strList As String
  Dim adoSt As Object
  Set adoSt = CreateObject("ADODB.Stream")
  With adoSt
    .Type = adTypeText
    .Charset = "UTF-8"
    .Open
  End With
  With ActiveSheet.UsedRange
    For i = 1 To .Rows.Count
      strList = ""
      For j = 1 To .Columns.Count
        If j > 1 Then
          strList = strList & ","
        End If
        strList = strList & .Cells(i, j)
      Next
      adoSt.WriteText strList, adWriteLine
    Next
  End With
  adoSt.SaveToFile "C:\test.txt", adSaveCreateOverWrite
  adoSt.Close
  Set adoSt = Nothing
End Sub


シートのUsedRangeをCSV出力しています。


※本記事を掲載後に、BOM無しのUTF8(UTF8N)でCSVを作成することがありましたので追記します。

詳細は、以下のページに詳しく書かれていますので、参考にしてください。
エクセルVBAでBOM無しのUTF-8でCSVファイルなどを出力する方法

adoSt.SaveToFile "C:\test.txt", adSaveCreateOverWrite
adoSt.Close 

この部分を



Dim byteData() As Byte
With adoSt
  .Position = 0
  .Type = adTypeBinary
  .Position = 3
  byteData = .Read
  .Close
  .Open
  .Write byteData
  .SaveToFile sFile, adSaveCreateOverWrite
  .Close
End With

このようにすることで、BOM無し(UTF8N)でCSVを作成できます。


UTF-8のCSVを読込、シートに出力します。

Sub sample2()
  Dim i As Long
  Dim j As Long
  Dim strList As String
  Dim strSplit() As String
  Dim adoSt As New ADODB.Stream
  i = 1
  With adoSt
    .Type = adTypeText
    .Charset = "UTF-8"
    .Open
    .LoadFromFile ("C:\test.txt")
    Do While Not (.EOS)
      strList = .ReadText(adReadLine)
      strSplit = Split(strList, ",")
      For j = LBound(strSplit) To UBound(strSplit)
        Cells(i, j + 1) = strSplit(j)
      Next
      i = i + 1
    Loop
    .Close
  End With
End Sub


UTF-8のCSVを行単位で読込、アクティブシーヘ書き出しています。


ADODB.Streamのメソッドとプロパティ


Open メソッドを使って、Record または URL から Stream を開きます。

Close メソッドを使って、Stream を閉じます。

Write メソッドまたは WriteText メソッドを使って、バイトまたはテキストを Stream に入力します。

Read メソッドまたは ReadText メソッドを使って、Stream からバイトを読み取ります。

Flush メソッドを使って、ADO バッファにある Stream データを基になるオブジェクトに書き込みます。

CopyTo メソッドを使って、Stream の内容を別の Stream にコピーします。

SkipLine メソッドおよび LineSeparator プロパティを使って、ソース ファイルから行を読み取る方法を制御します。

EOS プロパティおよび SetEOS メソッドを使って、ストリーム位置の末尾を設定します。

SaveToFile メソッドおよび LoadFromFile メソッドを使って、ファイル内のデータを保存および復元します。

Charset プロパティを使って、Stream の保存に使う文字セットを指定します。

Cancel メソッドを使って、非同期 Stream 操作を停止します。

Size プロパティを使って、Stream 内のバイト数を設定します。

Position プロパティを使って、Stream 内の現在の位置を制御します。

Type プロパティを使って、Stream 内のデータ型を設定します。

State プロパティを使って、Stream の現在の状態 (開いている、閉じている、または実行中) を設定します。

Mode プロパティを使って、Stream のアクセス モードを指定します。




同じテーマ「マクロVBAサンプル集」の記事

VBAでのCSVの扱い方まとめ
CSVの読み込み方法
CSVの読み込み方法(改)
CSVの読み込み方法(改の改)
CSVの読み込み方法(ジャグ配列)
CSVの読み込み方法(ジャグ配列)(改)
CSVの出力(書き出し)方法
UTF-8でCSVの読み書き(ADODB.Stream)
ADOでマスタ付加と集計(SQL)
ADOでマスタ更新(SQL)
ADOでCSVの読み込み(SQL)


新着記事NEW ・・・新着記事一覧を見る

ユーザーに絶対に停止させたくない場合のVBA設定|VBA技術解説(4月1日)
CharactersプロパティとCharactersオブジェクト|VBA技術解説(3月31日)
指数近似/対数近似/累乗近似(掲載順位とCTR)|エクセル関数超技(3月31日)
練習問題32(連続数値部分を取り出し記号で連結)|VBA練習問題(3月24日)
連続数値部分を取り出し記号で連結|エクセル関数超技(3月24日)
数式バーの高さを数式の行数で自動設定|VBAサンプル集(3月21日)
LET関数(数式で変数を使う)|エクセル入門(3月21日)
スピルに対応したXSPLITユーザー定義関数(文字区切り)|VBAサンプル集(3月15日)
XMATCH関数(範囲から値を検索し一致する相対位置)|エクセル入門(3月14日)
XLOOKUP関数(範囲を検索し一致する対応項目を返す)|エクセル入門(3月14日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.繰り返し処理(For Next)|VBA入門
9.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
10.セルに文字を入れるとは(Range,Value)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ