• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同じCSVファイルがPCによって文字化けする)

同じCSVファイルがPCによって文字化けする

このQ&Aのポイント
  • 新しいPCでCSVファイルを開くと文字化けしてしまう問題について
  • CSVファイルの文字コードを変更することで解決できる可能性があるが、作業量が膨大であるため現実的ではない
  • 旧PCで表示できることから、PCかエクセルが原因の可能性がある

質問者が選んだベストアンサー

  • ベストアンサー
  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.1

Excel2007が発売された当初はUTF-8に対応していなかったけど、サービスパックでUTF-8対応が行われたのかもしれません。 新PCには、まだサービスパックが適用されていないのかも。 http://blog.goo.ne.jp/lloyd_vs/e/e75a697865ab5d295ac5abdf6604ac10 上記の記事を参考に、Office2007にサービスパックを適用してみてください。 (Microsoft ダウンロードセンターからダウンロードするのが一番確実かな?)

itatwaok
質問者

お礼

早速の回答ありがとうございます。今、出先なので帰宅後確認してみます。

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

同じバージョンのエクセルで、しかも「OS」の新しい方がダメとは・・・ 以下に示すプログラムは、最終手段としてお使いください。 以下のプログラムをメモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。 できたプログラムファイル(「~.vbs」ファイル)を「csv」ファイル(必ず、すべて「UTF-8」)の存在するフォルダに放り込んで、ダブルクリックすると、すべての「UTF-8、csv」ファイルを、タブ区切りの「UTF-16、csv」ファイルに変換します。 どうして「タブ区切り」か、というと、エクセルでは、「UTF-16」の場合は、タブ区切りでないと、エクセルでちゃんと読み込まれないからです。 最後に「Finished!」と表示していますので、「OK」を押して、終了してください。 Option Explicit Dim a, b, f, m, n, r, s, t Set s = CreateObject("Scripting.FileSystemObject") Set f = s.GetFolder(".") For Each m In f.Files If LCase(s.GetExtensionName(m.Name)) = "csv" Then Set a = CreateObject("ADODB.Stream") a.Type = 2 a.Charset = "UTF-8" a.Open a.LoadFromFile f & "\" & m.Name b = s.GetBaseName(m.Name) Set t = s.OpenTextFile(f & "\" & b & ".xyz",2 ,True, True) r = a.ReadText(-1) r = Replace(r, ",", vbTab) t.Write(r) a.Close t.Close s.DeleteFile f & "\" & m.Name Set n = s.GetFile(f & "\" & b & ".xyz") n.Name = b & ".csv" Set t = Nothing Set a = Nothing Set n = Nothing End If Next Set s = Nothing Set f = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味ですが、気にしないでください。 Set s = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしていますが、今回は特に、「UTF-16」テキストファイルを扱うのにも必要です。 Set f = s.GetFolder(".") プログラムファイル(「~.vbs」ファイル)自身が存在するフォルダを取得してます。 For Each m In f.Files プログラムファイルの存在するフォルダ内のすべてのファイルを1つずつ処理。 If LCase(s.GetExtensionName(m.Name)) = "csv" Then もし、拡張子が「csv」なら、 Set a = CreateObject("ADODB.Stream") 「UTF-8」テキストファイルを扱うのに必要です。 a.Type = 2 a.Charset = "UTF-8" a.Open a.LoadFromFile f & "\" & m.Name 「UTF-8」ファイルを開いています。 b = s.GetBaseName(m.Name) ベースネーム(たとえば「xyz.csv」なら「xyz」の部分)を取得しています。 Set t = s.OpenTextFile(f & "\" & b & ".xyz",2 ,True, True) 「UTF-16」テキストファイルを新規作成しています。 r = a.ReadText(-1) 一気に全部読み込んでいます。 r = Replace(r, ",", vbTab) 「,」を「タブ」に置換しています。 t.Write(r) 「UTF-16」の方に書き込んでいます。 a.Close t.Close 閉じています。 s.DeleteFile f & "\" & m.Name 元の「csv」ファイルを削除。 Set n = s.GetFile(f & "\" & b & ".xyz") 今作成した「~.xyz」ファイル(「UTF-16」)を取得しています。 n.Name = b & ".csv" 名前を「~.csv」にしています。 Set t = Nothing Set a = Nothing Set n = Nothing End If Next 変数を解放しています。 を、繰り返しています。 Set s = Nothing Set f = Nothing MsgBox("Finished!") 最後に「Finished!」と表示しています。

itatwaok
質問者

お礼

す、すごいですね!びっくりしました。私のためにプログラムまで作ってくださりありがとうございます。BAに選ぶことでお礼をさせて頂きたかったのですが、エクセルのサービスパックをあてることで、表示できてしまったので、利用できませんでした。本当ありがとうございました。

関連するQ&A