• 締切済み

ExcelでUTF-8のcsvデータを表示するには

KenKen_SPの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

もう読んでないかもしれませんが、、、 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

関連するQ&A

  • CSVをエクセルで開いたときの表示設定など

    例えば、あるCSVに住所とフリーワードなどのフィールドがあります。 --------------------------- name,jusho1,jusho2,jusho3,comment A,東京都,品川区●●,1-1,"あいうえお" B,東京都,千代田区●●,2-1,"かきくけこ" C,東京都,港区●●,3-1,"さしすせそ" --------------------------- これを、そのままエクセルで開くと、jusho3のフィールドが日付で表示されてしまいます。 この事象を、エクセルの設定などで改善する策はあるのでしょうか。 利用環境はwindowsXPで、Excel2007です。 なお、エクセルの外部データ読み込み機能を使い、文字列型で読み込めば該当の フィールドは改善することはわかっているのですが、commentの値に改行が含まれ ていると、その改行で1段下にずれて、変なレコードとして登録されてしまうみたいです。 ちなみに、これは最終的にエクセルで別場所に納品する必要があるため、ACCESS で代用することはできません(ACCESSでこの事象が回避できるのは確認しました)。 また、ACCESSに一度インポートしてからエクセルにインポートするということもできま せん(ソフトウェア使用権限と操作者リテラシーの問題もあり) いろいろすみませんが、ご回答お願いします。

  • 改行区切りのテキストをExcelに取り込みたい

    改行区切りのテキストを以下のようにExcelに取り込みたいのですが、やり方がわかりません。どうぞやり方を教えてください。 山田太郎 住所:千葉 性別:男 佐藤愛子 住所:山梨 性別:女 ↓↓↓↓↓↓↓↓↓↓ 名前  |住所|性別 山田太郎|千葉|男 佐藤愛子|山梨|女 よろしくお願いします。

  • UTF-8のCSVファイルを開く

    エクセル2000でUTF-8の文字コードで作られたCSVファイルを開くと 文字化けしてしまいます。  文字化けせずに開く方法を御存知の方、教えてください。  VBAを使う方法でも構いません。(コードを教えてください。) 宜しくお願いします。 以上

  • CSVをエクセルでアップデートしたいのですが

    現在、ホームページに設置したデータベース検索CGIに入れてある会員名簿のcsvファイルがあるんですが、 これがエクセルで 会員番号  氏名   郵便番号   住所             TEL  1   鎌倉太郎 123-0001 東京都中央区架空町2-21-13 03-5123-0125  2   市原三郎 456-0001 東京都中央区架空町1-51-13 03-5123-0125  3   山田洋子 789-0001 東京都中央区架空町3-28-11 03-5123-0125  4   船橋香織 876-0001 東京都中央区架空町4-24-14 03-5123-0125  5   相模大介 321-0001 東京都中央区架空町5-21-10 03-5123-0125  6   川崎花子 888-0001 東京都中央区架空町1-11-11 03-5123-0125 と表示されるようになっているとします。 ここに、更新されたデータだけ抽出された  2   市原三郎 456-0001 東京都新宿区番外町4-55-66 03-5123-0125  4   浜松香織 876-0001 静岡県三島市新天町5-12-10 052-123-0125  6   川崎花子 444-0001 千葉県松戸市某乃町5-21-10 047-523-0125 というcsvファイルが友人からメールで届いたとしたら、このデータを読み込むことや、それに準じるいくつかの簡単な操作だけで、同じ会員番号のデータだけ上書きされるようにする事って出来ないでしょうか? 私はエクセルに関しては殆ど無知で、csvファイルを表として見たり、ソートしたりするためにしか使ったことがない人間なので、もし私が望んでいる事が可能でしたら、メニューバーの「○○」から「×××」という項目に入って…などと、ステップを具体的に教えて頂けるとありがたいのですが…。

  • CSV形式のファイル名をCSVの先頭に入れる方法

    EXCEL CSV形式のファイル名をCSVファイルの先頭に入れるたいのですが,EXCELのマクロやBVなどで簡単にできるよい方法はないでしょうか。 例えば, ファイル名:  123_001.csv 123_001.csvの内容:  氏名,年齢  山田,25歳    ↓ の123_001.csvを  コード,氏名,年齢  123_001,山田太郎,25歳 というデータにしたいのです。 できれば,フォルダ内に保存されているCSVファイルを一括で処理したいのですが...。 例) 123_001.csvの内容:  氏名,年齢  山田,25歳 123_002.csvの内容:  氏名,年齢  吉田,30歳 123_003.csvの内容:  氏名,年齢  鈴木,50歳    ↓ 123_001.csvの内容:  コード,氏名,年齢  123_001,山田,25歳 123_002.csvの内容:  コード,氏名,年齢  123_002,吉田,30歳 123_003.csvの内容:  コード,氏名,年齢  123_003鈴木,50歳 よろしくお願いします。

  • エクセルのCSVエクスポートのコード

    エクセルのCSVエクスポートのコードについて知りたいのです。 文字コードは、シフトJIS? テキストは、””囲みになる? 改行コードは、CRなの?CRLFなの? お時間のある方、教えてください。

  • エクセルで住所録を作成中です。

    エクセルで住所録を作成中です。 B列に住所が入力されている場合に、その列に記載されている住所が”港区”ならC列に”甲”と表示し、”中野区”なら”乙”と表示するというふうに、住所の中に特定の文字列を含んでいれば、それに対応した特定の文字列を表示する方法を教えて下さい。 例)  A      B        C 鈴木一郎 東京都港区・・・   甲 田中太郎 東京都中野区・・・  乙 山田花子 東京都千代田区・・・ 丙

  • エクセルで縦並びのデータを横1本にしたい

    楽天RMS等でよくあるデータの形ですが下記の様なデータを横並びにまとめたいと考えています。 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 すごい石鹸A 1個 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 ミラクルシャンプー 1個 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 ミラクルリンス   2個 何か良い手はありませんでしょうか。 こんなイメージです。  ↓ 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 すごい石鹸A 1個  ミラクルシャンプー 1個 ミラクルリンス   2個 よろしくお願い致します。

  • エクセルのマクロ 【】の中だけ抽出〒と住所を分ける

    あるデータからコピペしてエクセルに並べ替えたいのですが 例えば 山田 太郎【やまだ たろう】 〒123-4567 東京都~ というデータをエクセルにペーストしました。 A2のセルには 山田 太郎【やまだ たろう】 A3のセルには 〒123-4567 東京都~ が入力されたとします。 それを B1とC1には 山田 太郎 D1には やまだ たろう E1には 123-4567 F1には 東京都~ を入れたいのですがマクロで出来る方法を教えて下さい。

  • CSVをExcel2007に取り込む方法について

    CSVファイルをエクセルに取り込みたいと思います。 CSVファイルはカンマでデータを区切っています。 ただ、カンマで区切られたデータの中に、改行コードが含まれている場合があります。 エクセルで、このCSVデータを読み込む場合、セルの中で2行目以降はとぎれてしまいます。 そこで、下記のサイトで、「引用符で囲まれた改行を無視」というエクセルの 機能があることを知りましたが、Excel2007にはこの機能はないのでしょうか? https://tsukaeru-excel.com/line-feed-code-csv-powerquery 最近のバージョンのExcelには標準でそなわっているようです。