dポイントプレゼントキャンペーン実施中!

エクセルマクロ(VBA)で、xmlファイルを自動生成するツールを作成しようとしています。
やりたいことは、「テンプレートとなるxmlファイルを用意しておき、そのxmlファイルに記述してある特定の文字列を、エクセルで記入したデータで置換する」です。

似たようなマクロを作成された経験のある方いらっしゃいましたら、置換するために行う手順、及び必要な関数等を教えていただけますでしょうか。

何卒よろしくお願いいたします。

A 回答 (4件)

#1です。

DOMの自習を致しました。
MSXMLを使用したい場合、xmlsdk30.chmをダウンロードして、サンプルコードを眺めるのが良いと思います。VB & MSXMLの書籍も探しましたが、既に絶版になっているものが殆どで、Java Script用の書籍で我慢しました。
http://www.microsoft.com/downloads/details.aspx? …
もっと新しいバージョンのヘルプがあるかもしれませんが...
DOM/How Do I?/Program with DOM in Visual Basic
の中にある、stocks.xmlというファイルに対して、
<portfolio xmlns:dt="urn:schemas-microsoft-com:datatypes">
中略
<stock exchange="nyse">
<name>zacx corp</name>
<symbol>ZCXM</symbol>
<price dt:dt="number">28.875</price>
</stock>
</portfolio>

同じく、Query XML DOM Nodes (Visual Basic) を改造した、下記の様なコードで置換可能でした(zacx corp -> microsoft corp)
'MSXML3に参照設定
Private Sub test()
Dim oXMLDom As New DOMDocument30
oXMLDom.async = False
oXMLDom.validateOnParse = False
oXMLDom.resolveExternals = False
oXMLDom.preserveWhiteSpace = True
Dim oNode As IXMLDOMNode

If oXMLDom.Load(ThisWorkbook.Path + "\stocks.xml") = False Then
MsgBox "Failed to load xml data from file."
Exit Sub
End If
Set oNode = oXMLDom.selectSingleNode("//stock/name[.='zacx corp']")
If oNode Is Nothing Then
MsgBox "みつかりませんでした"
Exit Sub
Else
oNode.Text = "microsoft corp"
oXMLDom.Save ThisWorkbook.Path + "\saved.xml"
End If
End Sub
(以上、Copyright Microsoft)
    • good
    • 0

MSXMLはMSXML6.0が安定最新版です。


直接XMLにアクセスしてXML関連の機能はたいてい揃っています。

参考URL:http://www.microsoft.com/downloads/details.aspx? …
    • good
    • 0

質問者に2007が有るとして、


テンプレートであるファイルのシートを、開いている、「エクセルで記入したデータの有るシート」とは別空白シートに読み込み、対応するセルは同じものに関する記述だと思うので、空白セル以外のセルを逐一探し、テンプレートからのコピーしたシートのセルの値に置き換えて、最後に不必要なシートは除き(削除)、2007ファイル形式で保存しては。
これで不都合は出そうですか。
質問者は、プロ以外は誰もやらないと思う、先進的にXMLを扱ってみたいですか。
ーー
エクセルの現に有る、シートの仕組みや保存の仕組みを使わないで、1から直接テキスト的なファイルを触るのは労力がかかるのでは。
エクセルを使うと、上記のことぐらい、VBAも使えると思う。
また更新・修正データの入力をエクセルでさせるのでしょう。
確かにエクセルの保存ファイルフォーマットがブラックボックスだった以前と比べ、その知識は要らなくなっているのだろうが。
質問者はどれだけの技量か質問には書けないわけだが、XMLを扱った経験は相当有るのかな。
    • good
    • 0

普通のテキストファイルとして(改行のないxmlの場合は丸ごと読み込んで)、文字列操作関数を使えばよいのではありませんか。

但し、xmlの文字コードがUTF-8等の場合には、ADODB.Streamで、一旦UTF-16に変換してから操作し、UTF-8に変換して保存するといった処置が必要になります。単純な置換や、ワイルドカードでの置換では不十分で、パターンマッチングによる置換を行いたい場合は、VBA regexpで検索していただくと、正規表現検索/置換の記事が沢山見つかります。
MSXML.DOMを用いる方法も考えられますが、自分も勉強中でアドバイスはできません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています