検索

キーワード


目次

【Excel VBA】UTF-8のCSVデータを読み込んでセルに記載する方法

  • 公開日:2026-07-13 10:26:08
  • 最終更新日:2026-07-16 20:25:28

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

皆さんこんにちは、エンジニアのIMMRです。


VBAでは、CSVを読み込むことができます。読み込む方法の記事も以前に作成しています。

CSVデータを読み込んでセルに記載する方法

この上記記事では、「Line Input」で読み込む方法を説明しています。


しかし、上記の方法でUTF-8のCSVデータを読み込むと下記図のように文字化けを起こしてしまいます。


図1 CSV(取り込み)文字化けの場合

図1 CSV(取り込み)文字化けの場合


ちなみにインプットとなっているCSVに問題はないです。


図2 CSVデータ(参加者名簿)

図2 CSVデータ(参加者名簿)


このような文字化けが起きないようにCSVファイルを読み込んでいきたいです。


1.UTF-8のCSVデータを読み込んで、セルに記載する方法

いままでは、Shift-JIS形式のCSVデータであったのでLine Inputで正しく読み込むことが出来ましたが、

現在のCSVデータはUTF-8形式のデータであるため、読み込むことができません。


なぜ正しく読み取ることができないかというとUTF-8はUnicode のファイルです。

しかし、 Windowsで一般的に使用されるのはShift-JISです。

そのため、Line Inputの命令で行うとShift-JISデータだと勝手に判断して読み込んでしまうため、

文字化けという現象が発生してしまうのです。


そのため、今まで使用してきた「Line Input」ではなく、「ADODB.Streamオブジェクト」の

方法でCSVを読み取る必要があります。


2.ADODB.Streamオブジェクトの設定方法(1)

ADODB.Streamオブジェクトを使用するためには、まずはライブラリを設定する必要があります。


①Visual Basicをクリックします。


図3 設定1

図3 設定1



②ツールの「参照設定」をクリックします。


図4 設定2

図4 設定2



③「Microsoft ActiveX Data Objects 6.1 Library」を選択して、OKをクリック

ここでは6.1を選択していますが、それ以降で最新のものがあればそれを選択します。


図5 設定3

図5 設定3


これで準備完了です。



3.ADODB.Streamオブジェクトの設定方法(2)

次に「ADODB.Stream」を設定して、CSVを読み込みます。


ADODB.Streamオブジェクトの生成

Dim ado As Object
Set ado = CreateObject("ADODB.Stream")

ADODB.Streamにより、オブジェクトを生成します。


②ADODB.Streamオブジェクトの文字コードの設定

ado.Charset = "UTF-8"

※先ほど、作成したADODB.Streamの「ado」オブジェクトに文字コード”UTF-8”を設定します。


③ADODB.Streamオブジェクトのオープン

ado.Open

※先ほど、作成したADODB.Streamの「ado」オブジェクトをオープン


④ADODB.StreamオブジェクトでオープンするCSVの設定

Dim File_name As String
File_name = "C:\記事\INPUT.csv"
ado.LoadFromFile (File_name)

※File_nameを文字列で宣言して、その中に読み込むCSVデータが格納されているパスをセットします。

 そしたら、CSVファイルをオープンします。


⑤EOFまで読み込む

Do Until ado.EOS

Loop

※Line Inputと同じようにDo Untilを使用して、EOF(End Of File)まで読み込みます。


⑥1列読み込む

Dim  buf As String
buf = ado.ReadText(adReadLine)

※「buf」という変数を文字型で宣言して、その中にADODB.Streamの「ado」オブジェクトで

 読み込んだ1行格納されます。


⑦ ⑥で読み込んだのは1行です。そのため、”1111,AAA,BBB,CCC,DDD”のように

,で区切りがされていないため、区切る必要があります。

Dim tmp As Variant
tmp = Split(buf, ",")

※Split関数により、","で区切ります。そして、配列:tmpに格納されます。


⑧ 格納された tmp(配列)に格納された値を1つずつセルに格納する

j = j + 1
For i = 0 To UBound(tmp)
  Cells(j, i + 1) = tmp(i)
Next

※UBoundを使用して配列に投稿した値をセルにセットしていきます。
 配列は、0から始まるのでi=0からで行っていますが、セルではCell(j,0)というような箇所はないので、i+1にしています。


4.UTF-8のCSVデータを読み込んで、セルに記載する(サンプルプログラム)

では、以上のことよりサンプルプログラムを作成していきます。

Sub test1()
    Dim i As Long, j As Long
    Dim File_name As String, buf As String
    Dim tmp As Variant
    Dim ado As Object
    
    Set ado = CreateObject("ADODB.Stream")
    
    File_name = "C:\記事\INPUT.csv"

         ado.Charset = "UTF-8"
         ado.Open
         ado.LoadFromFile (File_name)
         
        j = 0
        Do Until ado.EOS
            buf = ado.ReadText(adReadLine)
            tmp = Split(buf, ",")
            j = j + 1
            For i = 0 To UBound(tmp)
                Cells(j, i + 1) = tmp(i)
            Next
        Loop
    Close #1
End Sub


※ファイルの配下は「"C:\記事\INPUT.csv"」です。

 3で説明したオブジェクトの設定方法により、

 ①~⑧の順序でCSVを読み込み、セルの値貼り付けを行います。


5.UTF-8のCSVデータを読み込んで、セルに記載する(サンプルプログラム)の実行





図6 実行結果






【著者】

Imamura

「挑戦心」を忘れずに、新しいことにチャレンジしています。 資格:VBAエキスパート Excel VBA(ベーシック/スタンダード) 等

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事