質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

24328閲覧

XMLでの改行の仕方

sigret

総合スコア45

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/03/20 09:35

現在VBAマクロで選択したブックのにあるシートの情報をWMLで出力するマクロを作成しています。
出力自体は上手くいくのですがいざテキストファイルを開いてみると一行でごちゃごちゃ・・・。
これをIEなどで開いた時のようにきれいにする(改行)する方法を教えてください!
調べても意味不明なのしか出てこないです・・・。
よろしくお願いします・・。

現状
<1><2><3>#35A16B</3><4>#FAF500</4></2></1>・・・・・・・・

やりたいこと
<1>
<2>
<3>aaa</3>
<4>bbb</4>
</2>
</1>

現在のXMLの取得の仕方です。

Set

1 Row = 3 2 Col = 2 3 For i = Number To TargetWorkbook.Worksheets.Count 4 SheetName = TargetWorkbook.Worksheets(i).Name 5 6 Do While Col < 7 7 If TargetWorkbook.Worksheets(i).Cells(Row, Col).Value <> "" Then 8 If Col = 2 Then 9 x = TargetWorkbook.Worksheets(i).Cells(Row, 7).Value 10 y = TargetWorkbook.Worksheets(i).Cells(Row, 9).Value 11 Set xmlObj = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, x, "")) 12 xmlObj.Text = y 13 ElseIf Col = 3 Then 14 x = TargetWorkbook.Worksheets(i).Cells(Row, 7).Value 15 y = TargetWorkbook.Worksheets(i).Cells(Row, 9).Value 16 Set xmlObj1 = xmlObj.appendChild(xmlDoc.createNode(NODE_ELEMENT, x, "")) 17 xmlObj1.Text = y 18 xmlObj.appendChild xmlObj1 19 ElseIf Col = 4 Then 20 x = TargetWorkbook.Worksheets(i).Cells(Row, 7).Value 21 y = TargetWorkbook.Worksheets(i).Cells(Row, 9).Value 22 Set xmlObj2 = xmlObj.appendChild(xmlDoc.createNode(NODE_ELEMENT, x, "")) 23 xmlObj2.Text = y 24 xmlObj1.appendChild xmlObj2 25 ElseIf Col = 5 Then 26 x = TargetWorkbook.Worksheets(i).Cells(Row, 7).Value 27 y = TargetWorkbook.Worksheets(i).Cells(Row, 9).Value 28 Set xmlObj3 = xmlObj.appendChild(xmlDoc.createNode(NODE_ELEMENT, x, "")) 29 xmlObj3.Text = y 30 xmlObj2.appendChild xmlObj3 31 "" & vbNewLine & "" 32 ElseIf Col = 6 Then 33 x = TargetWorkbook.Worksheets(i).Cells(Row, 7).Value 34 y = TargetWorkbook.Worksheets(i).Cells(Row, 9).Value 35 Set xmlObj4 = xmlObj.appendChild(xmlDoc.createNode(NODE_ELEMENT, x, "")) 36 xmlObj4.Text = y 37 xmlObj3.appendChild xmlObj4 38 End If 39 40 Col = 2 41 Row = Row + 1 42 Else: Col = Col + 1 43 End If 44 Loop 45 Next 46 End If 47 48 49 xmlDoc.Save (FileName)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

MXXMLWriterを利用することでインデント整形が可能です。

作成したXMLをxmlDoc.Save (Filename)で出力する前に、以下のようなコードで整形すれば目的の結果が得られると思います。

'xmlDoc.Save (Filename) 'Reader/Writerを用意する Dim oXmlReader As New SAXXMLReader Dim oXmlWriter As New MXXMLWriter 'Writerでインデント設定する oXmlWriter.indent = True 'ReaderとWriterを紐づける Set oXmlReader.contentHandler = oXmlWriter '作成したXMLをReaderで読み込む oXmlReader.Parse xmlDoc.XML '出力用DOMにWriterの整形結果を読ませる Dim xmlDoc2 As New MSXML2.DOMDocument xmlDoc2.LoadXML oXmlWriter.output '出力用DOMで保存 xmlDoc2.Save (Filename)

お試しください。

投稿2018/03/22 05:18

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sigret

2018/03/23 03:04

え!?なんでなんで!?すごい!!(笑) 改行に加えインデントもきれいになってる!! 一瞬で全部の悩みが解決しました!(内容が理解出来ていないのでこれから読み込みますがw) ありがとうございます!<m(__)m>
guest

0

整形したいだけならこれなんてどうでしょうか。
コピペしてBeautify押すだけです。
https://codebeautify.org/htmlviewer/

投稿2018/03/20 12:40

hiromichinomata

総合スコア294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問