XMLをエクセルに取り込むマクロその2
以下のtest2.xmlを
<?xml version="1.0" encoding="UTF-8" ?>
<McXMLRoot>
<McXMLData>
<McXMLPageInfo>
<page>1</page>
<overLay></overLay>
<partition>PAGE</partition>
</McXMLPageInfo>
<McXMLPageData>
<現頁>
<value>0001</value>
</現頁>
<作成日付>
<value>平成21年 6月 1日現在</value>
</作成日付>
<Group0001>
<氏名>
<value>あああ</value>
</氏名>
<生年月日>
<value>昭和48年 2月21日</value>
</生年月日>
</Group0001>
<Group0002>
</Group0002>
<Group0003>
</Group0003>
</McXMLPageData>
<McXMLPageInfo>
<page>2</page>
<overLay></overLay>
<partition>PAGE</partition>
</McXMLPageInfo>
<McXMLPageData>
<現頁>
<value>0004</value>
</現頁>
<作成日付>
<value>平成21年 6月 1日現在</value>
</作成日付>
<Group0001>
<氏名>
<value>いいい</value>
</氏名>
<生年月日>
<value>昭和55年 12月5日</value>
</生年月日>
</Group0001>
<Group0002>
<法人名>
<value>AAA株式会社</value>
</法人名>
<住所>
<value>AA市1丁目1番地</value>
</住所>
</Group0002>
<Group0003>
<支店名>
<value>BBB営業所</value>
</支店名>
</Group0003>
</McXMLPageData>
</McXMLData>
</McXMLRoot>
を読むマクロ↓
Public Const XmlPass = "D:\temp\test2.xml"
Public y As Integer
Public ctr As Long
Public Sub Auto_Open()
'On Error Resume Next
Workbooks.OpenXML Filename:= _
XmlPass _
, LoadOption:=xlXmlLoadImportToList
Range("A1").Select
Call RetsuSakujo
Call parseXML
End Sub
Private Sub RetsuSakujo()
ctr = 1
Do Until "" = Trim(Worksheets("sheet1").Cells(1, ctr))
If "eform" = Trim(Worksheets("sheet1").Cells(1, ctr)) Or _
"page" = Trim(Worksheets("sheet1").Cells(1, ctr)) Or _
"overLay" = Trim(Worksheets("sheet1").Cells(1, ctr)) Or _
"partition" = Trim(Worksheets("sheet1").Cells(1, ctr)) Then
Worksheets("sheet1").Columns(ctr).EntireColumn.Delete
ctr = 0
End If
ctr = ctr + 1
Loop
End Sub
Private Sub parseXML()
Dim objDOM, rtResult
y = 1
Set objDOM = CreateObject("MSXML2.DOMDocument")
rtResult = objDOM.Load(XmlPass)
If rtResult = True Then
Call setTitle(objDOM.childNodes)
End If
Set objDOM = Nothing
End Sub
Sub setTitle(objNode)
Dim obj
For Each obj In objNode
If obj.hasChildNodes Then
If obj.parentNode.nodeName <> "McXMLRoot" And _
obj.parentNode.nodeName <> "McXMLData" And _
obj.parentNode.nodeName <> "McXMLPageData" And _
obj.parentNode.nodeName <> "McXMLPageInfo" _
Then
If SearchChild(obj.childNodes) = False Then
If y >= ctr Then
Exit Sub
End If
Cells(1, y).Value = obj.parentNode.nodeName
y = y + 1
End If
End If
Call setTitle(obj.childNodes)
End If
Next
End Sub
Private Function SearchChild(objNode) As Boolean
Dim obj
For Each obj In objNode
If obj.hasChildNodes Then
SearchChild = True
Else
SearchChild = False
End If
Next
End Function
を作成してエクセルマクロを試したところ、
タイトルが
現頁,作成日付,氏名,生年月日,現頁2,作成日付2,氏名2,生年月日2,法人名
となります。が、本当は
現頁,作成日付,氏名,生年月日,法人名,住所,口座番号,口座名義人,支店名
としたいのです。(エクセルでXMLソースを表示した時の順序)
なにかよい方法があれば教えてください。
よろしくお願いします。
お礼
アドバイスありがとうございます。 返事が遅くなってしまってすみませんでした! いろいろ試してなんとかうまくいきました。 ありがとうございました!