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

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

VBAクラスの作り方:独自Rangeっぽいものを作ってみた|VBA技術解説(2月16日)
VBAクラスの作り方:列名のプロパティを自動作成する|VBA技術解説(2月14日)
VBAクラスの作り方:列名の入力支援と列移動対応|VBA技術解説(2月11日)
クラスを使って他ブックのイベントを補足する|VBA技術解説(2月6日)
Excelアドインの作成と登録について|VBA技術解説(2月3日)
参照設定、CreateObject、オブジェクト式の一覧|VBA技術解説(1月20日)
VBAでファイルを規定のアプリで開く方法|VBA技術解説(1月20日)
ドキュメントプロパティ(BuiltinDocumentProperties,CustomDocumentProperties)|VBA技術解説(1月19日)
他ブックへのリンクエラーを探し解除|VBAサンプル集(1月15日)
特殊フォルダの取得(WScript.Shell,SpecialFolders)|VBA技術解説(1月1日)

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

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



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

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


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





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

    本文下部へ

    ↑ PAGE TOP