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

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

ただいまの
回答率

88.93%

マクロツールの汎用化 <初学者です。>

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,533

saito.kaz

score 76

イメージ説明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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • Zuishin

    2018/09/10 18:18

    そうですね。読むのは厳しいです。質問を編集してコードブロックを使って掲載してください。サンプルやパターンもコードブロックに入れてください。

    キャンセル

  • Zuishin

    2018/09/10 18:31

    やりたいことが変わるのでは回答できません。まず仕様をちゃんと練って「どういうデータ」から「どういう結果」を得るのか確定させてください。そして結果のサンプルを Excel で作り、画像を掲載すればイメージしやすくて回答もつくと思います。

    キャンセル

  • saito.kaz

    2018/09/10 18:43

    ありがとうございます。次回意識します。修正依頼にもとづき、タグ値と出力結果のマッピング表を添付します。

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る