A 回答 (2件)
- 最新から表示
- 回答順に表示
No.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
No.1
- 回答日時:
こんばんは。
ちょっと、ご質問内容が分りにくいですね。
>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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
vba フィルター 複数条件 3つ以...
-
Redim とEraseの違いは?
-
デバイスマネージャーの一覧取得
-
構造体配列内の文字列検索のよ...
-
VB6のメモリ解放に関して
-
エクセル VBA 変数を一括で宣言...
-
定数配列の書き方
-
VB.NETにて、構造体へデータを...
-
複数のtextboxの処理を一括で行...
-
VB6で、一次元配列と二次元配列...
-
DBから取得した値を配列へ代入する
-
配列をランダムに並び替えても...
-
エクセルVBAで実行時エラー7、...
-
VBAのワークシート関数で配列の...
-
VBAにて、配列のデータを一度に...
-
エクセルの列一括書き込み
-
CheckBoxの配列化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
Dir関数で読み取り順を操作でき...
-
Excel2010のinputboxで複数デー...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
エクセル(VBA)の空白配列の削除...
-
Redim とEraseの違いは?
-
定数配列の書き方
-
VB6のメモリ解放に関して
-
CheckBoxの配列化
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
大量の変数を定義するにはどう...
-
OutOfMemoryExceptionの回避策...
おすすめ情報