【Excel】【VBA】ADODB.Streamを利用したコード変換機能付きCSVファイル取込

 ADODB.Stream (Microsoft ActiveX Data Objects)を使えば、コード変換をしながらCSVデータを取り込むことが可能。

CSVファイルの作成元のシステムが、Windows(Excel)以外で、文字コードを気にしなければならない場合、このサンプルコードが役に立つ。

Sub ADODBStreamを利用したコード変換機能付きCSVファイル取込()
    
    'microsoft cdo for windows 2000  参照設定 メール処理用
    'Microsoft ActiveX Data Objects x.x Library 参照設定 Stremオブジェクトによるコード変換用
    
    Dim FileName As String
    Dim Charset As String
    
    FileName = "C:\MyCSVlist_Shift-JIS.csv" 'CSVファイル名を指定


    'https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/charset-property-ado?view=sql-server-ver15
    'ストリームの内容が変換される文字セットを指定する文字列値を設定または返します。
    '既定値は Unicodeです。 使用できる値は、インターネット文字セット名としてインターフェイスで渡される一般的な文字列です
    '(たとえば、"iso-8859-1"、"Windows-1252" など)。 システムによって認識される文字セット名の一覧については、
    'Windows レジストリの HKEY_CLASSES_ROOT \MIME\Database\Charset のサブキーを参照してください。
    '    Charset = "UTF-8"
    Charset = "Shift-JIS"  'ここではShift-JISを指定

    Dim Buf As String, RowIndex As Long
    Dim Tmp As Variant, ColmunIndex As Long
    Dim ADOStream As ADODB.Stream
    Set ADOStream = New ADODB.Stream
    Dim Ws As Worksheet
    Set Ws = ActiveSheet
    Dim aa As ADODB.StreamReadEnum


    RowIndex = 1

    'ストリームを開く
    With ADOStream
        .Charset = Charset
        .Open
        .LoadFromFile FileName
        
        '取込
        Do Until .EOS
            'https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/readtext-method?view=sql-server-ver15
            Buf = .ReadText(ADODB.StreamReadEnum.adReadLine)     '1行ずつ読み込むときは「adReadLine(-2)」を指定
            Tmp = Split(Buf, ",") 'カンマ分割
            For ColmunIndex = 0 To UBound(Tmp)
                Ws.Cells(RowIndex, ColmunIndex + 1) = Tmp(ColmunIndex)
            Next ColmunIndex
            RowIndex = RowIndex + 1
        Loop
        
        '閉じる
        .Close
    End With
    
    '終了処理
    Set ADOStream = Nothing

End Sub

おまけ  HKEY_CLASSES_ROOT\MIME\Database\Charsetの確認コマンド

一覧と、jisコード、unicode関連の登録状況を確認した結果

PS C:\Users\papanda925> reg query HKEY_CLASSES_ROOT\MIME\Database\Charset

HKEY_CLASSES_ROOT\MIME\Database\Charset\ANSI_X3.4-1968
HKEY_CLASSES_ROOT\MIME\Database\Charset\ANSI_X3.4-1986
HKEY_CLASSES_ROOT\MIME\Database\Charset\arabi
HKEY_CLASSES_ROOT\MIME\Database\Charset\ascii
HKEY_CLASSES_ROOT\MIME\Database\Charset\ASMO-708
HKEY_CLASSES_ROOT\MIME\Database\Charset\Big5
HKEY_CLASSES_ROOT\MIME\Database\Charset\chinese
HKEY_CLASSES_ROOT\MIME\Database\Charset\CN-GB
HKEY_CLASSES_ROOT\MIME\Database\Charset\cp1256
HKEY_CLASSES_ROOT\MIME\Database\Charset\cp367
HKEY_CLASSES_ROOT\MIME\Database\Charset\cp819
HKEY_CLASSES_ROOT\MIME\Database\Charset\cp852
HKEY_CLASSES_ROOT\MIME\Database\Charset\cp866
HKEY_CLASSES_ROOT\MIME\Database\Charset\csASCII
HKEY_CLASSES_ROOT\MIME\Database\Charset\csbig5
HKEY_CLASSES_ROOT\MIME\Database\Charset\csEUCKR
HKEY_CLASSES_ROOT\MIME\Database\Charset\csEUCPkdFmtJapanese
HKEY_CLASSES_ROOT\MIME\Database\Charset\csGB2312
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISO2022JP
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISO2022KR
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISO58GB231280
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatin1
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatin2
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatin4
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatin5
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatinArabic
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatinCyrillic
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatinGreek
HKEY_CLASSES_ROOT\MIME\Database\Charset\csISOLatinHebrew
HKEY_CLASSES_ROOT\MIME\Database\Charset\csKOI8R
HKEY_CLASSES_ROOT\MIME\Database\Charset\csKSC56011987
HKEY_CLASSES_ROOT\MIME\Database\Charset\csShiftJIS
HKEY_CLASSES_ROOT\MIME\Database\Charset\csUnicode11UTF7
HKEY_CLASSES_ROOT\MIME\Database\Charset\csWindows31J
HKEY_CLASSES_ROOT\MIME\Database\Charset\cyrillic
HKEY_CLASSES_ROOT\MIME\Database\Charset\DOS-720
HKEY_CLASSES_ROOT\MIME\Database\Charset\DOS-862
HKEY_CLASSES_ROOT\MIME\Database\Charset\DOS-874
HKEY_CLASSES_ROOT\MIME\Database\Charset\ECMA-114
HKEY_CLASSES_ROOT\MIME\Database\Charset\ECMA-118
HKEY_CLASSES_ROOT\MIME\Database\Charset\ELOT_928
HKEY_CLASSES_ROOT\MIME\Database\Charset\euc-jp
HKEY_CLASSES_ROOT\MIME\Database\Charset\euc-kr
HKEY_CLASSES_ROOT\MIME\Database\Charset\Extended_UNIX_Code_Packed_Format_for_Japanese
HKEY_CLASSES_ROOT\MIME\Database\Charset\GB2312
HKEY_CLASSES_ROOT\MIME\Database\Charset\GBK
HKEY_CLASSES_ROOT\MIME\Database\Charset\GB_2312-80
HKEY_CLASSES_ROOT\MIME\Database\Charset\greek
HKEY_CLASSES_ROOT\MIME\Database\Charset\greek8
HKEY_CLASSES_ROOT\MIME\Database\Charset\hebrew
HKEY_CLASSES_ROOT\MIME\Database\Charset\hz-gb-2312
HKEY_CLASSES_ROOT\MIME\Database\Charset\IBM367
HKEY_CLASSES_ROOT\MIME\Database\Charset\ibm819
HKEY_CLASSES_ROOT\MIME\Database\Charset\ibm852
HKEY_CLASSES_ROOT\MIME\Database\Charset\ibm866
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-2022-jp
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-2022-kr
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-1
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-11
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-2
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-3
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-4
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-5
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-6
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO-8859-8 Visual
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-8-i
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-8859-9
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-100
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-101
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-110
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-111
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-126
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-127
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-138
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-144
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-148
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-149
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-58
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso-ir-6
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO646-US
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso8859-1
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso8859-2
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_646.irv:1991
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso_8859-1
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso_8859-1:1987
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso_8859-2
HKEY_CLASSES_ROOT\MIME\Database\Charset\iso_8859-2:1987
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-4
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-4:1988
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-5
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-5:1988
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-6
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-6:1987
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-7:1987
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-8:1988
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-9
HKEY_CLASSES_ROOT\MIME\Database\Charset\ISO_8859-9:1989
HKEY_CLASSES_ROOT\MIME\Database\Charset\koi
HKEY_CLASSES_ROOT\MIME\Database\Charset\koi8-r
HKEY_CLASSES_ROOT\MIME\Database\Charset\koi8-ru
HKEY_CLASSES_ROOT\MIME\Database\Charset\korean
HKEY_CLASSES_ROOT\MIME\Database\Charset\KSC5601
HKEY_CLASSES_ROOT\MIME\Database\Charset\KSC_5601
HKEY_CLASSES_ROOT\MIME\Database\Charset\ks_c_5601
HKEY_CLASSES_ROOT\MIME\Database\Charset\ks_c_5601-1987
HKEY_CLASSES_ROOT\MIME\Database\Charset\ks_c_5601-1989
HKEY_CLASSES_ROOT\MIME\Database\Charset\l1
HKEY_CLASSES_ROOT\MIME\Database\Charset\l2
HKEY_CLASSES_ROOT\MIME\Database\Charset\l4
HKEY_CLASSES_ROOT\MIME\Database\Charset\l5
HKEY_CLASSES_ROOT\MIME\Database\Charset\latin1
HKEY_CLASSES_ROOT\MIME\Database\Charset\latin2
HKEY_CLASSES_ROOT\MIME\Database\Charset\latin4
HKEY_CLASSES_ROOT\MIME\Database\Charset\latin5
HKEY_CLASSES_ROOT\MIME\Database\Charset\logical
HKEY_CLASSES_ROOT\MIME\Database\Charset\ms_Kanji
HKEY_CLASSES_ROOT\MIME\Database\Charset\shift-jis
HKEY_CLASSES_ROOT\MIME\Database\Charset\shift_jis
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode-1-1-utf-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode-1-1-utf-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode-2-0-utf-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicodeFFFE
HKEY_CLASSES_ROOT\MIME\Database\Charset\us
HKEY_CLASSES_ROOT\MIME\Database\Charset\us-ascii
HKEY_CLASSES_ROOT\MIME\Database\Charset\utf-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\utf-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\visual
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1250
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1251
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1252
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1253
HKEY_CLASSES_ROOT\MIME\Database\Charset\Windows-1254
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1255
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1256
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1257
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-1258
HKEY_CLASSES_ROOT\MIME\Database\Charset\windows-874
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-ansi
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-cp1250
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-cp1251
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-euc
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-euc-jp
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-ms-cp932
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-sjis
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-unicode-2-0-utf-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-unicode-2-0-utf-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-user-defined
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-x-big5
HKEY_CLASSES_ROOT\MIME\Database\Charset\_autodetect
HKEY_CLASSES_ROOT\MIME\Database\Charset\_autodetect_all
HKEY_CLASSES_ROOT\MIME\Database\Charset\_autodetect_kr
HKEY_CLASSES_ROOT\MIME\Database\Charset\_iso-2022-jp$ESC
HKEY_CLASSES_ROOT\MIME\Database\Charset\_iso-2022-jp$SIO
PS C:\Users\papanda925> reg query HKEY_CLASSES_ROOT\MIME\Database\Charset  | Select-String utf

HKEY_CLASSES_ROOT\MIME\Database\Charset\csUnicode11UTF7
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode-1-1-utf-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode-1-1-utf-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode-2-0-utf-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\utf-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\utf-8
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-unicode-2-0-utf-7
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-unicode-2-0-utf-8


PS C:\Users\papanda925> reg query HKEY_CLASSES_ROOT\MIME\Database\Charset  | Select-String jis

HKEY_CLASSES_ROOT\MIME\Database\Charset\csShiftJIS
HKEY_CLASSES_ROOT\MIME\Database\Charset\shift-jis
HKEY_CLASSES_ROOT\MIME\Database\Charset\shift_jis
HKEY_CLASSES_ROOT\MIME\Database\Charset\x-sjis

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました