• ベストアンサー

ExcelVBAで書き出した文字が化ける

お世話になります。 ExcelのVBAでテキストにタグをつけてxml形式で書き出すようにしたのですが、xmlの始めの文章で <?xml version="1.0" encoding="UTF-8" standalone="yes"?> で文字コード?を指定しているために書き出されたxmlをドリームウェーバーで開くと平仮名などの中身の文字が化けます。 MacのOSXを使っているためなのか、ADODBが使えないようです。 参考までにこんなプログラムです↓ Sub kaki_TextFile2() Const cnsFILENAME = "a.xml" Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 Worksheets("最終データ").Activate ' 最終行の取得 GYOMAX = Range("A65536").End(xlUp).Row ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(出力モード) Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' レコードを出力 Print #intFF, strREC ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE Close #intFF End Sub といってもこちらから抜粋させていただいただけなのですが… http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_040.html VBもxmlも初心者同然なので、、、すみませんがよろしくお願いします。

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

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

Windowsの場合、Print文で出力される文字コードはCP932=Shift_JISになる のですが、Macの場合もShift_JISになるのですかね? (日本語をPrint文で出力して、バイナリエディタで文字コードを調べれば 確認できるはず) いっそのこと、String変数にはUnicodeで持っている(※)わけなので、 BinaryモードでUnicodeをはけば確実ではないでしょうか? ※ MsgBox AscW("あ") → 12354 → &H3042 で確認できるはず (Shift_JISの"あ"は &H82a0となる) # 最悪、encoding=UTF-8でもUnicodeエスケープすればできるかも。 # <?xml version="1.0" encoding="utf-8"?> # <a>&#x3042;</a> # ってのは 3042 は "あ" のUnicodeだが、ちゃんと表示できる。 もしくは、MacのExcelのバージョンが良くわからないのでできるかわかりませんが、 出力するものをすべてSheetに吐き出し、Unicodeのテキストファイルとして出力するとか。 (たぶんこれができれば一番楽)

noname#161375
質問者

お礼

お返事ありがとうございます。 本当に申し訳ないのですが、もう少しわかりやすく説明していただいてもよろしいでしょうか? MsgBox AscW("あ")をイミディエイトで実行すると12354という結果が表示されたのですが それをバイナリエディタに通せばいいのでしょうか? 最後の#最悪~~というところは全然理解ができなくて…すいません;; ちなみにExcelは Excel2004 for mac、 Microsoft visual basic  共にバージョン11.0です。

その他の回答 (5)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.6

この検証用にちょうどよいMAC用バイナリエディタを見つけました。 「HexEditor」は文字のエンコーディングを指定して、表示させることができるそうです。 http://park.zero.ad.jp/pautha/hexeditor.html MACには Microsoft XML V.xx みたいなdllは無いですよね?

回答No.5

>Print #intFF, strREC ' レコードを出力 で出力したらMacでは文字コードがどうなるか確認してもらいたいわけです。 単純な文字列を吐き出し、出来上がったテキストファイルをバイナリエディタで みたとき、どうなっているか ということです。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>で、 そのXMLで使用される文字コードはUTF-8だと宣言しています。 これをもってXMLの文字コードを判定しているソフトもあれば、そうでない ソフトもあります。 WindowsのEXCELで使われている文字コードはShift-JISです。 Print文は文字コードの変換をしないと思うのですが、 だから抜本的におかしいです。 そのXMLをどう使うのかわかりませんが、 <?xml version="1.0" encoding="Shift-JIS" standalone="yes"?> と換えるのはだめなんですか?

noname#161375
質問者

お礼

ありがとうございます。 でき上がったxmlを利用するときに、文字コードはUTF-8でないといけないそうです。 なので、その方法は使えそうになさそうです。 わざわざありがとうございます。

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.2

>書き出されたxmlを全部コピーして上記が既に入力されているxmlファイルにペースト という状態であれば、 Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF これを書き換えたいファイル名に変更してあげれば動作するのでは? Dim Fname As String Fname = Application.GetOpenFilename("XMLファイル,*.xml") If Fname = "False" Then Exit Sub 上記を最初に行って書き換えたいXMLファイルを取得して、 Open Fname For Output As #intFF とすればうまくいきそうな感じに受け取れるのですが。

noname#161375
質問者

お礼

ありがとうございます。 やってみたのですがうまく動作しませんでした( Application...でエラーがでます) 私のやり方が悪いのかもしれませんのでこんな感じにしたのですが↓ 'Sub kaki_TextFile2() Const cnsFILENAME = "a.xml" Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 Dim Fname As String Worksheets("最終データ").Activate ' シートの指定 Fname = Application.GetOpenFilename("XMLファイル,panaa.xml") If Fname = "False" Then Exit Sub GYOMAX = Range("A65536").End(xlUp).Row ' 最終行の取得 intFF = FreeFile ' FreeFile値の取得(以降この値で入出力する) Open Fname For Output As #intFF ' 指定ファイルを開く GYO = 2 ' 2行目から開始 Do Until GYO > GYOMAX ' 最終行まで繰り返す strREC = Cells(GYO, 1).Value ' A列内容をレコードにセット(先頭は2行目) Print #intFF, strREC ' レコードを出力 GYO = GYO + 1 ' 行を加算 Loop Close #intFF ' 指定ファイルをとじる 関係ないのかもしれませんが、最初に書き込んだものを実行するとファイル名がフォルダ名を参照して一つ前の階層に保存されます。 ex) デスクトップ/p(フォルダ)/Excelファイル デスクトップ/pa.xml

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.1

とりあえず普通のエディタで文字化けしないものを作りましょう。 xml 文字化けなどでググリましょう。 で、化けないようなxmlファイルが作れたら、 そのフォーマットにしたがって自動化してください。 一気にやるのは無茶です。一つ一つ課題をクリアしましょう

noname#161375
質問者

お礼

早いお返事ありがとうございます。 説明不足で申し訳なかったのですがExcelのシート上で <?xml version="1.0" encoding="UTF-8" standalone="yes"?> の文字列をいれずに書き出しするとxmlファイルは文字化けしないのです。 対策として… xml上で文字コードを指定する文(上記)を入力しない状態で書き出す→書き出されたxmlを全部コピーして上記が既に入力されているxmlファイルにペースト という手段をとっているのですが、なんとか自動化にする手段を探しています… やはり無理なのでしょうか?

関連するQ&A