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

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

ただいまの
回答率

88.06%

VBAでのXML作成

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,205

score 45

現在Excelに記述してある設定ファイルの表をXMLへ変換するマクロを作っているのですが、調べても既に表が完成していることが前提の説明しか出てきません。(現在の表はまだ追加や削除が出るかわからない状態でその都度修正を行っていたら大変、とのことでこれをマクロでするとの作業です。)
また表は複数あり(シートで分けられている)、それぞれ数や文言が違うのですがこれをマクロですることはできるのでしょうか?

とりあえずボタン押下時にExcelを選択するダイアログ部分だけ作って躓いてます。

Sub XML()
 Dim OpenFileName As String
    OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
        Set TargetWorkbook = Workbooks.Open(OpenFileName)
        Set xmlDoc = New MSXML2.DOMDocument60
        Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"""))

End Sub

未熟者ですみません。
よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

できるかできないかでいえば、できます。
どうやるか?については、答えられません。

いわゆる、仕様がないからです。

完成している表であれば、xmlタグの名前や、値の取得方法が決まっているので、
以下のように、それにもとずいた設定をしています。

   '<Tel>要素を追加します。
    Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Tel", ""))
    node(3).Text = "111-1111-1111"

今回のように不定な表からxmlを作るのであれば、不定の表をどうxml化するのか?
の仕様を決めれば、その通りにコーディングすればよいです。

上記の例でいうと"TEL"にあたる部分や、"111-1111-1111"部分の取得方法。
ほかのノードとの親子関係など、どう扱うのかを仕様化する必要があります。

どんな表か、わかりませんが1列目なのか1行目をタグの名前にして、値を取得して・・・を
データがなくなるまで繰り返す。

レベルの回答ぐらいしかできませんし。
不定の表の定義方法についても、こんな表現はできませんよ。
っていう制約をつけたりと当事者でないとわからないことが多いので、これ以上はなんとも・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/16 09:03

    回答ありがとうございます。
    具体的にはexcelのB列に親要素、C列に子要素、D列に孫要素・・と論理名があり、G列に物理名、I列に初期値があります。
    これをマクロ実行でXMLの形にしたい、とのことです。
    論理名の階層構造通りに物理名を入れ、初期値があれば初期値も入れる、といった感じです。
    物理名や論理名の列は固定されるそうですがこの中身(孫要素の追加、削除など)は変わる可能性があるから漏れがないようマクロ実行でXMLを作りたい、です。

    キャンセル

  • 2018/03/16 10:59

    MSXML2の使い方調べながら、そのように実装してくださいとしか言えません。
    何に困っているか、わからないですし誰かに実装してもらいたいなら、テラテイルでは回答を期待しないほうが良いです。

    キャンセル

0

現在のexcelが吐き出すxlsxファイルやopendocumentファイルはそもそもxmlデータをzipで圧縮したものなので、単にxmlがほしいだけなら解凍すれば終わりです。

特別な様式なxmlがほしいならば、「表」→xmlではなく、xml→xmlの変換を模索したほうがいいのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/15 17:08

    学生じゃないんだよなぁ・・・。

    キャンセル

  • 2018/03/15 17:41

    マクロを作るにしても、難易度が高いから作るのに時間もコストもかかるけど、大丈夫なんですか?
    なんで「作成する、らしい」と「らしい」が付くんでしょうか?
    マクロ化する本当の目的はなんでしょうか?
    なんでシステム化の主導権が開発者であるあなたではないのでしょうか?

    キャンセル

  • 2018/03/16 08:55

    ExcelVBAerさん
    マクロ化する目的→まだ設定ファイルが完成しておらずその都度変更してたら漏れが出たり、そもそもいちいち変更するのが面倒、だからです。
    主導権→なんというか・・上の方から「そうして(マクロでやって)」と言われ、それでやるしかないから・・ですかね。

    キャンセル

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

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

関連した質問

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