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ファイルを開かずにシート名をチェック

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

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.マクロって何?VBAって何?|ExcelマクロVBA入門
7.定数と型宣言文字(Const)|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



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

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


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





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

    本文下部へ

    ↑ PAGE TOP