- 締切済み
ExcelでUTF-8のcsvデータを表示するには
あるデータベースから出力したCSV形式のデータがあるのですが、 文字コードがUTF-8なので、直接Excelで開くと文字化けがあります。 なので、一度出力したcsvファイルの拡張子をtxtに変えて、 それをExcelから開くという作業をして対応しています。 (そうすると文字コードが選択できるので) しかしcsvをtxtに変えてExcelで開くと、 思いもよらぬところで改行されてしまい、 正しくデータが表示されません。 例)csvでそのまま開いたとき ユーザーコード 苗字 名前 住所 001 山田 太郎 東京都大田区鵜の木 1-2-3 002 高橋 愛子 東京都港区六本木2-3-4 ↓ txtに変換したのちにexcelで開いたとき ユーザーコード 苗字 名前 住所 001 山田 太郎 東京都大田区鵜の木 1-2-3 ←余計な改行が発生 002 高橋 愛子 東京都港区六本木2-3-4 これを回避するために、一度csvで開いて、 セル内改行コードを空白と置き換えるという作業をしたのですが、 それでも上記のような改行が発生してしまっています。 UTF-8のcsvを文字化けなくExcelで開く方法は他にはないでしょうか? また上記方法の改善点はありますでしょうか? ご助言宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- KenKen_SP
- ベストアンサー率62% (785/1258)
もう読んでないかもしれませんが、、、 UTF-8 には BOM(Byte Order Mark)があるものと、無いものが あります。公称ではありませんが、一般的には ・UTF-8 (BOM有り) ・UTF-8N(BOM無し) などの呼び方で区別されるようです。 Excel で UTF-8 エンコードされた CSV を開くには、この BOM が 無いと文字化けします。そのシステムから出力された CSV は、 UTF-8N なのでしょう。対策として、 ・TeraPad などのエディタで「文字コード指定保存」コマンドを 使い、UTF-8(BOM有り)で保存しなおす ・VBA で BOM バイナリをくっつけてから開く などの方法がとれそうです。 後者の VBA を利用するなら以下のようなソースになると思いますが、 エディタを使った方が簡単でしょう。 なお、下記ソースは必要最小限のことしか書いてません。試す場合は、 バックアップをとってからでお願いします。 勘違い回答ならばスルーの方向で。。 Public Sub OpenCSV_UTF8() Dim fn As String fn = CStr(Application.GetOpenFilename("CSVファイル (*.csv), *.csv", _ MultiSelect:=False)) If UCase$(fn) = "FALSE" Then Exit Sub End If If AddUTF8BomBinary(fn) Then Dim wb As Workbook Set wb = Workbooks.Open(fn) End If End Sub ' // UTF-8 エンコードされたファイルの BOM の有無を確認し、 ' // BOM 無し(UTF-8N)ならば、BOM 付きで上書きする ' Public Function AddUTF8BomBinary(ByVal fn As String) As Boolean Const adTypeBinary As Long = 1 Const adSaveCreateOverWrite As Long = 2 On Error GoTo Err_ ' UTF-8 BOM バイナリデータ Dim bin(2) As Byte bin(0) = &HEF bin(1) = &HBB bin(2) = &HBF ' ファイルからバイナリストリームを作成 Dim stm1 As Object ' ADODB.Stream Set stm1 = CreateObject("ADODB.Stream") stm1.Type = adTypeBinary stm1.Open stm1.LoadFromFile fn ' UTF-8 BOM の有無確認 Dim bHasBom As Boolean Dim i As Long bHasBom = True For i = 0 To UBound(bin) If stm1.Read(1)(0) <> bin(i) Then bHasBom = False Exit For End If Next i ' BOM 無し(UTF-8N)ならBOMを加えて上書きする If Not bHasBom Then Dim stm2 As Object ' ADODB.Stream Set stm2 = CreateObject("ADODB.Stream") stm2.Type = adTypeBinary stm2.Open stm2.Write bin stm1.Position = 0 stm1.CopyTo stm2 stm1.Close stm2.SaveToFile fn, adSaveCreateOverWrite stm2.Close End If AddUTF8BomBinary = True Bye_: On Error Resume Next stm1.Close: Set stm1 = Nothing stm2.Close: Set stm2 = Nothing Exit Function Err_: MsgBox Err.Description, vbCritical Resume Bye_ End Function
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
直接の回答ではないのですが……。 もしも、文字コードを変更しても良いのであれば、 http://www.vector.co.jp/soft/dl/win95/util/se326595.html というようなソフトで、shift-jis に変換してしまえばいいかと思います。 UTF-8 のまま編集する必要があるのなら(編集の規模にもよりますが)EmEditor というエディタをお勧めします。 http://jp.emeditor.com/ ちょっと高いですが(といっても、4,200円ですが)UTF-8 の、CSV ファイルを表示する・編集をするためには、十分な機能を持っています。 (UTF-8 を含む ユニコード対応と、csv 編集モードつき) 元々がエディタですので、文字の編集や検索・置換は得意ですし、csv で分離されたひとつの項目であれば、一括削除や、それをキーにしたソートも可能です。
お礼
早々のご回答ありがとうございます! UTF-8のまま編集できるソフトがあるんですね。 ちょっと体験版を試してみたいと思います! ただUTF-8のデータをほぼ参照するだけなので (海外の登録者の名前などを見る) 有償ソフトを使うほどでもないかなぁ。。 でも奥の手はこちらのソフトを使用したいと思います。 有難うございました。