アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

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/sub0 …

VBもxmlも初心者同然なので、、、すみませんがよろしくお願いします。

A 回答 (6件)

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のテキストファイルとして出力するとか。
(たぶんこれができれば一番楽)
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
本当に申し訳ないのですが、もう少しわかりやすく説明していただいてもよろしいでしょうか?
MsgBox AscW("あ")をイミディエイトで実行すると12354という結果が表示されたのですが
それをバイナリエディタに通せばいいのでしょうか?

最後の#最悪~~というところは全然理解ができなくて…すいません;;

ちなみにExcelは
Excel2004 for mac、
Microsoft visual basic 
共にバージョン11.0です。

お礼日時:2009/05/28 11:16

この検証用にちょうどよいMAC用バイナリエディタを見つけました。


「HexEditor」は文字のエンコーディングを指定して、表示させることができるそうです。
http://park.zero.ad.jp/pautha/hexeditor.html

MACには Microsoft XML V.xx みたいなdllは無いですよね?
    • good
    • 0

>Print #intFF, strREC ' レコードを出力


で出力したらMacでは文字コードがどうなるか確認してもらいたいわけです。

単純な文字列を吐き出し、出来上がったテキストファイルをバイナリエディタで
みたとき、どうなっているか
ということです。
    • good
    • 0

<?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"?>
と換えるのはだめなんですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/28 10:57

>書き出された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

とすればうまくいきそうな感じに受け取れるのですが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やってみたのですがうまく動作しませんでした( 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

お礼日時:2009/05/28 10:54

とりあえず普通のエディタで文字化けしないものを作りましょう。


xml 文字化けなどでググリましょう。

で、化けないようなxmlファイルが作れたら、
そのフォーマットにしたがって自動化してください。

一気にやるのは無茶です。一つ一つ課題をクリアしましょう
    • good
    • 0
この回答へのお礼

早いお返事ありがとうございます。
説明不足で申し訳なかったのですがExcelのシート上で

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

の文字列をいれずに書き出しするとxmlファイルは文字化けしないのです。
対策として…

xml上で文字コードを指定する文(上記)を入力しない状態で書き出す→書き出されたxmlを全部コピーして上記が既に入力されているxmlファイルにペースト

という手段をとっているのですが、なんとか自動化にする手段を探しています…
やはり無理なのでしょうか?

お礼日時:2009/05/26 16:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!