• ベストアンサー

xmlファイル内の文字列置換

エクセルマクロ(VBA)で、xmlファイルを自動生成するツールを作成しようとしています。 やりたいことは、「テンプレートとなるxmlファイルを用意しておき、そのxmlファイルに記述してある特定の文字列を、エクセルで記入したデータで置換する」です。 似たようなマクロを作成された経験のある方いらっしゃいましたら、置換するために行う手順、及び必要な関数等を教えていただけますでしょうか。 何卒よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1です。DOMの自習を致しました。 MSXMLを使用したい場合、xmlsdk30.chmをダウンロードして、サンプルコードを眺めるのが良いと思います。VB & MSXMLの書籍も探しましたが、既に絶版になっているものが殆どで、Java Script用の書籍で我慢しました。 http://www.microsoft.com/downloads/details.aspx?FamilyID=b432cd45-b7ed-4c32-a443-ec56f10ee175&displaylang=en もっと新しいバージョンのヘルプがあるかもしれませんが... 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)

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

MSXMLはMSXML6.0が安定最新版です。 直接XMLにアクセスしてXML関連の機能はたいてい揃っています。

参考URL:
http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4009-be21-27e85e1857b1&DisplayLang=ja
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

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

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

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

関連するQ&A