• ベストアンサー

外国語とCSVについて

エクセルにベトナム語を入力し、 システムにインポートするためにCSV化したところ Ý nghĩa của このような言葉が ? ngh?a c?a とCSV内で表示されてしまいます 解消する方法ご存知のかたいらっしゃったら、教えてください (なお、エクセルから「名前を付けて保存」の際に オプションで「Webオプション」選択し、「ベトナム語」を選択してみましたがだめでした」

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

  • ベストアンサー
回答No.3

こんにちは。 Unicodeでよければ、5年ほど前に作ったものがありますので、CSV化のコードを提供します。 どこかに、ActiveX やフォーム・コントロールのボタンとマクロを設定してください。昔のままですが、Excel 2010で試してみて、Unicodeは、出力しています。(おそらく、97以上なら、どのバージョンでも、可動するはずです。) '標準モジュール (ActiveX コントロールの場合は、ボタンを設定したシート) '最初に、出力範囲を選択してから、ボタンなどで実行してください。 '// Sub CSV_OutputByUnicode()   Dim rng As Range   Dim i As Long, j As Long   Dim Fso As Object   Dim f As Object   Dim fName As Variant   Dim buf As String   Dim TxtLine As String   Dim objTxt As Object   Dim OverWrite As Boolean   Dim mPath As String   '出力パス   mPath = ActiveWorkbook.Path & "\"   Set rng = Selection   If ActiveWorkbook.Path = "" Then MsgBox "一旦ファイルを保存してください。", vbExclamation: Exit Sub   '範囲のチェック(マウスで選択)   If rng.Cells.Count < 3 Then     MsgBox "最初に、範囲を選択してください。", vbExclamation     Exit Sub   End If   On Error GoTo ErrHandler Start:   Do     fName = Application.InputBox("出力名を入れてください。", "CSV出力", Type:=2)     If VarType(fName) = vbBoolean Then Exit Sub   Loop Until Trim(fName) <> ""   fName = mPath & fName   '拡張子のチェック   If StrComp(Right(fName, 4), ".csv", vbTextCompare) <> 0 Then     fName = StrConv(fName & ".csv", vbNarrow)   End If   'ファイルの上書きチェック   If Dir(fName) <> "" Then     If MsgBox("上書きしますか", vbQuestion + vbOKCancel) = vbOK Then       OverWrite = True     Else       GoTo Start     End If   End If   '出力   Set Fso = CreateObject("Scripting.FileSystemObject")   Set f = Fso.CreateTextFile(fName, OverWrite, True)   For i = 1 To rng.Rows.Count     For j = 1 To rng.Columns.Count       buf = buf & "," & rng.Cells(i, j).Text     Next j     If TxtLine = "" Then       TxtLine = Mid(buf, 2)     Else       TxtLine = TxtLine & vbCrLf & Mid(buf, 2)     End If     buf = ""   Next i   f.Write (TxtLine & vbCrLf)   f.Close ErrHandler:   If Err.Number > 0 Then     MsgBox Err.Number & " : " & Err.Description   Else     MsgBox fName & vbCrLf & "出力しました。", vbInformation   End If   Set objTxt = Nothing   Set f = Nothing   Set Fso = Nothing   Set rng = Nothing End Sub '//

その他の回答 (2)

noname#217196
noname#217196
回答No.2

日本語エクセルの標準機能では、csvファイルを含むテキストファイルへの保存時には、文字コードをJIS8ビットコードとシフトJISコードに変換してしまう仕様だから無理。 VBAプログラムを書いて独自にユニコードのままテキストファイルへ保存するか、ソフトウェア開発業者にそうしたプログラム開発を発注すれば可能。

回答No.1

エクセルだけでは無理なようです。 とりあえず Excel形式(*.xlsx) 等で保存し、 それを別のソフトで編集する必要がありそうです。 たとえば LibreOffice Calc を使用するとCSV保存時に文字コードを選択できます。 ここで多言語対応の文字コード、たとえば Unicode(UTF-8) を指定すると 外国語を含んだデータも保存できるかと思います。 ただ「システムにインポート」して使用するとのことですが、 そのシステムがインポート可能な文字コードが決まっているかと思います。 そのシステムが、たとえば日本語Windows環境で広く使用される Shift_JIS, Windows-31J, MS932 などと呼ばれる文字コードのファイルしかインポートできないとすれば、 どうやってもベトナム語を含んだデータは投入できないことになります。

関連するQ&A