- ベストアンサー
ExcelからCSVファイルへの変換と文字化け
- ExcelからCSVファイルへの変換と文字化けに悩まされています。文字化けをさせないCSVファイルへの保存のやり方を教えてください。
- エクセルからCSVファイルへの変換したときの文字化けに悩まされています。エクセルはデフォルトではSJISで保存されるため、UTF8で保存する方法を試しても文字化けが解消されないことがあります。
- エクセルからCSVファイルへの変換したときに文字化けが起きます。文字化けを解消するためには、UTF8で保存することが必要ですが、一部の方法では文字化けが解消されないことがあります。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
#5です。 63で返ってきたということですが、それは「?」の コードですね。 CSVに変換する前の元データのExcelファイルでご確認されたん ですよね? で、CSVへの変換はどうやってやってるのでしょうか。 変換ツール?それとも名前を付けて保存でCSV選択?
その他の回答 (8)
- Prome_Lin
- ベストアンサー率42% (201/470)
VBScriptでプログラムを組みました。 以下のプログラムをテキストエディタにコピー&ペーストし、「~.vbs」として保存してください。 「csv」出力したいエクセルファイルを適当なフォルダに、このプログラムファイルと一緒に放り込み、「~.vbs」プログラムファイルをダブルクリック(もしくは、「シングルクリック→Enter」の方が確実)すると、そのエクセルの一番左端のシートを「UTF-8」で「csv」出力してくれます。 Windows10 Pro 64bit、Excel 2016で確認済みです。 ただ、私、プログラム初心者のため、極めて鈍くさいプログラムになってしまっています。 For i = 1 to r For j = 1 to c - 1 | Next Next の間の部分は、このサイトでもう一度質問してください。 きっと、私なんかより、プログラムに詳しい方が、もっとスマートなプログラムを書かれると思います。 なお、もひとつ、分かっていないのですが、結果は「UTF-8(BOM付き)」となりました。 それで問題なければ、一応、目的は達成しています。 Option Explicit Dim a, b, c, d, i, j, r, u, v, w, x, y, z Set u = CreateObject("Scripting.FileSystemObject") Set v = u.GetFolder(".") Set w = CreateObject("ADODB.Stream") w.Type = 2 w.Charset = "UTF-8" w.Open Set x = CreateObject("Excel.Application") For Each a In v.Files b = LCase(u.GetExtensionName(a.Name)) If b = "xls" or b = "xlsx" Then Set y = x.Workbooks.Open(v & "\" & a.Name) Set z = y.Sheets(1) c = z.Range("XFD1").End(-4159).Column r = z.Range("A1048576").End(-4162).Row For i = 1 to r d = "" For j = 1 to c - 1 d = d & z.Cells(i, j).Value & "," Next d = d & z.Cells(i, c).Value w.WriteText d, 1 Next w.SaveToFile v & "\" & u.GetBaseName(a.Name) & ".csv" w.Close y.Close Set z = Nothing Set y = Nothing End If Next x.Quit Set u = Nothing Set v = Nothing Set x = Nothing MsgBox("Finished!")
お礼
おお、すばらしい。 ありがとうございます。 UTF-8になるところまではよいのですが、文字コードが異なるので、文字化けはきえません。 でも大変お手間をとらせました。 ありがとうございます。
- naoto0216
- ベストアンサー率46% (183/391)
よく分りませんが見た目がハイフンに見えてるだけなの かもしれませんので、試しに千代田区大手町19-1 のハイフンの 部分をコピーして半角ハイフンに置換してみてはどうでしょうか。 あ、その前に半角ハイフンで検索してちゃんとヒットするかを 確認した方がよいかもですね。
- Prome_Lin
- ベストアンサー率42% (201/470)
まず、いったん、シフトJISを通ってしまうと、Unicodeには戻りません。 「?」になった段階で、もうただの「?」でしかありません。 (私もお客さんから預かるデータで、最近多くて困っています) 私は、[SQL」については、全く分かりませんが、もし、「csv」形式しかダメでしたら、私なら、エクセルから「Unicode」のテキストに書き出し、そのテキストに「半角のカンマ」が存在しなければ、タブを半角のカンマに一括置換して、「~.csv」という名前で保存します。 ただ、そのデータベース、「Unicode」に対応していますよね?
補足
>私なら、エクセルから「Unicode」のテキストに書き出し、 >そのテキストに「半角のカンマ」が存在しなければ、 >タブを半角のカンマに一括置換して、「~.csv」という名前で保存します。 はい、これもやってみました。 「Unicode」で保存すると、テキストエディタでは文字化けはされていないようにみえます。 ただ、データベースはウェブなので、UTF8である必要があります。 UTF8にすると、やはり、「?」にかわってしまいます。 「19-1」のハイフンは、エクセルのCODE関数でしらべてみると、 「63」がかえるようで、全角ハイフンでも半角ハイフンでもないようでした。 なにかの記号が入力されてるようです。
- naoto0216
- ベストアンサー率46% (183/391)
>エクセルからCSVファイルへの変換したときの ということですが、変換とは「名前を付けて保存」からcsv形式を 選択して保存したってことでしょうか。 わたしの方でハイフンを入力したExcelをCSVで保存し、それを 秀丸エディタで開いても?とはなりませんでした。 念のため「千代田区大手町19-1」のハイフンをコピーして 適当なセルに貼り付けて、CODE関数で文字コードを確認してみては どうでしょうか。 半角ハイフンなら45 全角ハイフンなら8510 ダッシュなら8509 マイナスなら8541 になるはずです。 ちなみに上記は全て文字化けはされませんでした。
補足
>念のため「千代田区大手町19-1」のハイフンをコピーして 適当なセルに貼り付けて、CODE関数で文字コードを確認してみては どうでしょうか。 ありがとうございます。 CODE関数でしらべました。 「19-1」 のハイフンは、 「63」でかえっています。 なので、半角ハイフンでもなく、全角ハイフンでもなく、 なにかの記号、ということになりますね。 こういう箇所がファイル内にあまたにあります。 こまりました。
- asciiz
- ベストアンサー率70% (6803/9674)
ハイフンやマイナス記号に見える文字(でも文字コードは違う)と言うのが、結構あります。 >ハイフンに似てる文字の文字コード >http://qiita.com/ryounagaoka/items/4cf5191d1a2763667add >ハイフンとかダッシュとかUnicodeにあるたくさんの横線(全135文字) >http://tech.naviplus.co.jp/2014/12/05/ 実際、これらのページをExcelにコピペし、csvで保存してみると、「?」になってしまう横線文字が出てきます。 同じように、その住所記載の中で使われている横線も、「SJISでは保存できない横線文字」である可能性が高いです。 そこで一度、その住所で使われているハイフン記号を、自分で入力したハイフン(またはマイナス)記号に置換されてみてはいかがでしょうか。 どの横線文字が使われてるか見た目では判別できませんので、置換前のハイフンは実際の記載中からコピーしてみてください。 IMEで入力したハイフンやマイナス記号なら、csv保存しても化けないと思います。
お礼
ありがとうございます。 そのようです。ハイフンににた文字コードを調べる必要がありそうです。
- Prome_Lin
- ベストアンサー率42% (201/470)
私は、この問題を解決するために、いつも「Unicodeテキスト(*.txt)」を選択しています。 この場合、タブ区切りになりますが、実は、テキスト形式の方が、あとあと扱いやすいです。 と言うのは、「csv」ファイルをダブルクリックしてしまって、エクセルで読み込ませると、すべて「標準」で読み込んでしまうため、「0」から始まる数字の頭の「0」が欠落してしまったりして、大変なのです。 そこで、テキスト形式にしておくと、そのテキストを読み込むときに、列単位で「文字列」などと書式を割り当てられるのです。 お客さんから住所録が届いたとき、「csv」ファイルで届くと、エクセルに読み込ませるとき、この書式を設定した読み込みができないので、私は拡張子を「csv」から「txt」に変えてから読み込ませています。 こうしないと、北海道などのように、頭が「0」から始まる郵便場号などで頭の「0」が欠落してしまうのです。 また、エクセルはもちろん、ワードなどで表に文字を流し込むような場合も、このタブ区切りだと、流し込めるので、大変有用です。 私は、「csv」ファイルはむか~しからの慣習にすぎず、実は、タブ区切りの方がずっと扱いやすく、今は、タブ区切りを標準にすべきだと考えているくらいです。 他のソフト(例えばアクセスでも)、年賀状などを印刷するソフトでも、タブ区切りのデータは読み込めますし、確実に「Unicode」で保存できますよ!
補足
やりたいことは、エクセルデータをSQL文に変換したいのです。 その手順として、エクセルをCSVで保存した上で、テキストエディタ(秀丸など)で、置換してSQL文にして、SQLデータベースに読み込もうとしています。 ところが、エクセルをCSVで保存した段階で、ハイフンが?に変換されてしまい、そのあとでどうエンコードをなおそうが、その「?」マークがもとにもどりません。 そもそもエクセルでのCSV変換をしないほうがいいのでしょうか。
- dogs_cats
- ベストアンサー率38% (278/717)
NO1の方と同じ事だと思いますが、下記サイトを実施してみては如何でしょう。 http://mc2.civillink.net/excel/mojibake.html
補足
http://mc2.civillink.net/excel/mojibake.html こちらのサイトで、ANSIで保存しなおしました。 が、文字化けは解消されませんし、エンコードはSJISのままです。 ちなみに、秀丸でUTF8にしてみても、文字化けはかわりませんでした。
- aokii
- ベストアンサー率23% (5210/22062)
よくあることです。 パソコンのアップデートをしてから、csvファイルを開く標準のプログラムをメモ帳にし、エクセルでそのファイルを開いた後、csvファイルで名前を付けて保存してみてください。
補足
>パソコンのアップデートをしてから、 >csvファイルを開く標準のプログラムをメモ帳にし、 >エクセルでそのファイルを開いた後、 >csvファイルで名前を付けて保存してみて やってみました。文字化けは解消されません。 「パソコンのアップデート」というのはどういう意味でしょうか?
お礼
ありがとうございました。 最終的には、ハイフンは、文字コードで置換をかけることで解決しました。 ほかの文字化けも、同様に文字コードをしらべて置換をかけてひとつずつ解決しました。 コード番号についておしえていただいたので、BAとさせていただきます。
補足
ご回答ありがとうございます。 >63で返ってきたということですが、それは「?」のコードですね。 >CSVに変換する前の元データのExcelファイルでご確認されたん ですよね? はい、エクセルファイルで確認しました。 >で、CSVへの変換はどうやってやってるのでしょうか。 >変換ツール?それとも名前を付けて保存でCSV選択? 名前を付けて保存で、CSV選択しています。 63、というのは、「?」ということなんですね。 でも、エクセルでみると、ハイフンで表示されています。 文字どおり「?」です。