お世話になります。
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も初心者同然なので、、、すみませんがよろしくお願いします。
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>あ</a>
# ってのは 3042 は "あ" のUnicodeだが、ちゃんと表示できる。
もしくは、MacのExcelのバージョンが良くわからないのでできるかわかりませんが、
出力するものをすべてSheetに吐き出し、Unicodeのテキストファイルとして出力するとか。
(たぶんこれができれば一番楽)
お返事ありがとうございます。
本当に申し訳ないのですが、もう少しわかりやすく説明していただいてもよろしいでしょうか?
MsgBox AscW("あ")をイミディエイトで実行すると12354という結果が表示されたのですが
それをバイナリエディタに通せばいいのでしょうか?
最後の#最悪~~というところは全然理解ができなくて…すいません;;
ちなみにExcelは
Excel2004 for mac、
Microsoft visual basic
共にバージョン11.0です。
No.6
- 回答日時:
この検証用にちょうどよいMAC用バイナリエディタを見つけました。
「HexEditor」は文字のエンコーディングを指定して、表示させることができるそうです。
http://park.zero.ad.jp/pautha/hexeditor.html
MACには Microsoft XML V.xx みたいなdllは無いですよね?
No.5
- 回答日時:
>Print #intFF, strREC ' レコードを出力
で出力したらMacでは文字コードがどうなるか確認してもらいたいわけです。
単純な文字列を吐き出し、出来上がったテキストファイルをバイナリエディタで
みたとき、どうなっているか
ということです。
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"?>
と換えるのはだめなんですか?
ありがとうございます。
でき上がったxmlを利用するときに、文字コードはUTF-8でないといけないそうです。
なので、その方法は使えそうになさそうです。
わざわざありがとうございます。
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
とすればうまくいきそうな感じに受け取れるのですが。
ありがとうございます。
やってみたのですがうまく動作しませんでした( 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
No.1
- 回答日時:
とりあえず普通のエディタで文字化けしないものを作りましょう。
xml 文字化けなどでググリましょう。
で、化けないようなxmlファイルが作れたら、
そのフォーマットにしたがって自動化してください。
一気にやるのは無茶です。一つ一つ課題をクリアしましょう
早いお返事ありがとうございます。
説明不足で申し訳なかったのですがExcelのシート上で
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
の文字列をいれずに書き出しするとxmlファイルは文字化けしないのです。
対策として…
xml上で文字コードを指定する文(上記)を入力しない状態で書き出す→書き出されたxmlを全部コピーして上記が既に入力されているxmlファイルにペースト
という手段をとっているのですが、なんとか自動化にする手段を探しています…
やはり無理なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseへのxmlファイル追加
-
バッチファイルでテキストファ...
-
複数のXMLファイルからデータを...
-
UTF-8でエンコーディングとはど...
-
VB.2005でXMLを読み込む時のパ...
-
あせんうぶり言語
-
CPUの考え方を教えてください ...
-
XMLで要素が記述された順番に意...
-
Access VBAでXMLが読み込めない
-
空かスペースを認識させること...
-
SNMP リンクダウンとノードダ...
-
u_shortなどの省略した宣言につ...
-
XML同じ名前の要素を自動で集約...
-
ルート要素ノードが2個ある場合?
-
XMLを出力する時のエラー原因
-
VBでXMLファイルを作ると xmlns...
-
C# TreeView 効率良いノード追...
-
VBAのXML処理でメモリが足りない?
-
XMLの要素の内容の中に要素
-
終了タグが認識されない?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルでテキストファ...
-
UTF-8でエンコーディングとはど...
-
DOSコマンドラインからxmlファ...
-
GoogleマップでKMLが読み込めない
-
ExcelVBAで書き出した文字が化ける
-
C#で使用中のファイルに別のフ...
-
XMLファイルの作り方がわかりま...
-
eclipseへのxmlファイル追加
-
XHTMLの拡張子
-
VBAでxmlファイルの置換をしたい
-
複数のXMLファイルからデータを...
-
NEXUS7でSecret No5の使い方
-
ホームページビルダー19で作...
-
Windowsで見かけるxmlファイル...
-
Excel(2007以降)をxml形式に変...
-
質問
-
XMLデータを整形して、ブラウザ...
-
DataSetのwriteXmlでのXML宣言
-
ザウルスSL-860でのKeyHelperAp...
-
サイトマップとは何でしょうか?
おすすめ情報