Excelマクロ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サンプル集」の記事

CSVの読み込み方法
CSVの読み込み方法(改)
CSVの読み込み方法(改の改)
CSVの出力(書き出し)方法
UTF-8でCSVの読み書き(ADODB.Stream)
ADOでマスタ付加と集計(SQL)
ADOでマスタ更新(SQL)
ADOでCSVの読み込み(SQL)
Excelファイルを開かずにシート名を取得
Excelファイルを開かずにシート名をチェック


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

IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説(6月23日)
Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)
Shift_JISのテキストファイルをUTF-8に一括変換|VBAサンプル集(5月31日)
「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)
VBA+SeleniumBasicで検索順位チェッカー作成|VBA技術解説(5月18日)
テーブル操作のVBAコード(ListObject)|VBA入門(5月12日)
テーブル操作の概要(ListObject)|VBA入門(5月12日)
VBAのスクレイピングを簡単楽にしてくれるSelenium|VBA技術解説(5月6日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.繰り返し処理(For Next)|ExcelマクロVBA入門
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄


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

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


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






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