dポイントプレゼントキャンペーン実施中!

CSVデータを読込み、Excelのセルに書込むプログラムを作成しています。
UTF-8で書かれたCSVを読み込むと、もちろんだと思いますが、Excel上で文字化けが生じます。
カンマごとにVariant型の配列に格納してあるのですが、
その中身を取り出し、UTF-8にコード変換する事は出来るのでしょうか。
わかる方いらっしゃいましたら、回答願います。

A 回答 (2件)

エクセル標準の機能では、UTF-8で書かれたCSVファイルを読むことはできないと思います。


そこで、IEを使って読み込みます。
サンプル
----------------------------------------------------------------
Public Sub ReadCSVbyUTF8()
Dim IE
Dim a, i

Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate ("file:///C:\sample\UTF-8.txt")
While IE.busy: Wend
While IE.Document.readyState <> "complete": Wend
IE.Document.Charset = "UTF-8"
IE.Refresh
a = Split(IE.Document.body.innerText, vbCrLf)'行毎配列に
IE.Quit
For i = 0 To UBound(a)
'カンマ区切りで一行毎取り込み,ココで想定しているのは、2列。別に一気に設定しなくてもいいけど・
Sheets("Sheet1").Range("A2:B2").Offset(i) = Split(a(i), ",")
Next
End Sub
    • good
    • 0

こんばんは。



ちょっと、ご質問内容が分りにくいですね。
>UTF-8で書かれたCSVを読み込むと、・・Excel上で文字化け
>その中身を取り出し、UTF-8にコード変換する事は出来るのでしょうか。

UTF-8で書かれたCSVをExcelに読み込むということ解釈しました。JISで言う2バイト文字が文字化けしてしまいます。

一応、以下は、UTF-8 で書かれたCSVを、Excelに読み込むコードですから、もし違うようでしたら、またご指摘ください。

今回は、以下にURL のある Basp21 を使いました。それがなくても出来ますが、そのほうが簡単なので使いました。

データ型は、String型に格納しましたので、間違えないようにしてください。しかし、仮に、String型で出力しても、今回は、汎用型にするために、Excelのワークシートに対して、配列出力をやめたので、もしも、ワークシート上のキャスト変換を望まない場合は、予め、書式を文字列にしておいてください。
(例;CSV: 1E3 → Excel: 1.00E+03)

Sub UTF8toUnicode()
Dim bobj As Basp21
Dim FNo As Integer
Dim buf() As Byte
Dim bufj As String
Dim bufline() As String
Dim bufcell() As String
Dim i As Long, j As Long, k As Long
'http://www.hi-ho.ne.jp/babaq/basp21.html
'Basp21 のタイプライブラリを参照設定
Set bobj = New Basp21
'CSVファイル名
Const FILENAME As String = "SampleU.csv"
 FNo = FreeFile()
 Open FILENAME For Binary Access Read As #FNo
 buf = InputB(LOF(FNo), #FNo)
 bufj = bobj.Kconv(buf, 4, 5)
 Close #FNo
 bufline = Split(bufj, vbCrLf)
 Application.ScreenUpdating = False
 For i = LBound(bufline) To UBound(bufline)
  j = j + 1
  bufcell = Split(bufline(i), ",")
  For k = LBound(bufcell) To UBound(bufcell)
  Cells(j, k + 1).Value = bufcell(k)
  Next k
 Next i
 Application.ScreenUpdating = True
 Set bobj = Nothing
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!