XMLからExcelのマクロを利用して、Excelに特定の値を転記するロジックを組んでいるのですが、
下記の3パターンに対応するため、マクロを汎用化する必要があります。
★パターン1 <Value>値が複数存在する場合
<preference name="名前1" type="String" array="true" disabled="false">
<preference_description>備考1</preference_description>
<context name="test">
<value>r-</value>
<value>r-</value>
</context>
</preference>
★パターン2 <Value>値が1つのみ存在する場合
<preference name="名前2" type="Logical" array="false" disabled="false">
<preference_description>備考2</preference_description>
<context name="test">
<value>TRUE</value>
</context>
</preference>
★パターン3 <Value>が存在しない場合
<preference name="名前3" type="String" array="true" disabled="false">
<preference_description>説明1</preference_description>
</preference>
独学で勉強しており、一度自分に業務に近い内容を実装してみたく、
今回教えて頂いたプログラムを通して、学習したいとも考えております。
大変申し訳ございませんが、どのように実装すれば良いか教えて頂けないでしょうか。
初学者であり、どしょっぱつからつまずいております。
○サンプルファイル
<?xml version="1.0" encoding="Shift_JIS"?> <preferences> <category name="カテゴリ名"> <category_description></category_description> <preference name="名前1" type="String" array="true" disabled="false"> <preference_description>説明1</preference_description> </preference> <preference name="名前2" type="Logical" array="false" disabled="false"> <preference_description>説明2</preference_description> <context name="Teamcenter"> <value>true</value> </context> </preference>○実行結果
|名前|タイプ|配列|無効化|説明|値|
|name値|type値|array値|disable値|description値|value値|
○実行結果Excel (例)
|名前|タイプ|配列|無効化|説明|値|
|名前1|String|true|false|説明1| |
|名前2|Logical|false|false|説明2|true |
*帰宅したため作成中のプログラムはないのですが、下記のようなイメージです。
汎用化ができておらず、また階層が深くなるとどのように書けば良いのかわからなくなります。
(1週間前に参考書を利用して見よう見真似でコーディングしているので、階層が深くなったり少しでも
やりたいことが変わると書けなくなります。申し訳ございません。)
Sub XMLスキーマ対応付け() Dim myXMLMap As XmlMap Set myXMLMap = ActiveWorkbook.XmlMaps.Add _ (Schema:="C:\スキーマ\order.xsd") Range("B3").XPath.SetValue Map:=myXMLMap, _ XPath:="/order/date", Repeating:=False Range("B4").XPath.SetValue Map:=myXMLMap, _ XPath:="/order/customer", Repeating:=False With ActiveSheet.ListObjects("注文データ") .ListColumns(1).XPath.SetValue Map:=myXMLMap, _ XPath:="/order/goods/no", Repeating:=True .ListColumns(2).XPath.SetValue Map:=myXMLMap, _ XPath:="/order/goods/name", Repeating:=True .ListColumns(3).XPath.SetValue Map:=myXMLMap, _ XPath:="/order/goods/amount", Repeating:=True End With myXMLMap.Name = "orderDataXmlMap" End Sub
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="order"> <xsd:complexType> <xsd:sequence> <xsd:element name="date" type="xsd:string" /> <xsd:element name="customer" type="xsd:string" /> <xsd:element name="goods" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="no" type="xsd:string" /> <xsd:element name="name" type="xsd:string" /> <xsd:element name="amount" type="xsd:int" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
あなたの回答
tips
プレビュー