• 締切済み

ExcelのVBAで、XMLファイルのデータ抽出

はじめまして。 XMLファイルに含まれたデータの中から、特定の条件のデータのみを抽出するプログラムを作りたいと思っております。 XMLファイルの中身は <p name="test">あいうえお</p> <p name="test2">かきくけこ</p> <p name="test3">さしすせそ</p> … のようなデータが2~300以上あり、その中から、NAMEが"test"のものだけを抽出するプログラムなのですが、ExcelのVBAで可能でしょうか? ご教授頂ければ幸いです。よろしくお願いいたします。

みんなの回答

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.1

XMLの書かれたテキストファイルからExcelのワークシートに抽出するものとして作ってみました。 ExcelのAdvancedFilter(フィルタオプションの設定)を使ったものとVBAのLike演算子で1行ずつ判定するものの2種類です。 プロシージャは標準モジュールに置いてください。 XMLの書かれたテキストファイルは仮に"C:\XmlFile.xml"としましたので質問者様の実情に合わせて書き換えるようお願いいたします。 ご質問やご希望にあわないところなどありましたら補足いただければ、と思います。 1.AdvancedFilter使用 マクロのあるブックに"抽出"と"条件"の2枚のシートを用意し、 "条件"は、A1を空文字列以外の何らかの文字列、 A2をマッチングパターン(たとえば「'=<p name="test">*」)としておく。 Sub XMLextract1() Workbooks.OpenText "C:\XmlFile.xml" 'XMLファイル Selection.EntireRow.Insert Selection.Value = ThisWorkbook.Worksheets("条件").Range("A1").Value ThisWorkbook.Worksheets("抽出").Range("A:A").ClearContents Range(Selection, ActiveCell.SpecialCells(xlLastCell)).AdvancedFilter _ Action:=xlFilterCopy, CriteriaRange:= _ ThisWorkbook.Worksheets("条件").Range("A1:A2"), _ CopyToRange:=ThisWorkbook.Worksheets("抽出").Range("A1") ActiveWorkbook.Close savechanges:=False ThisWorkbook.Worksheets("抽出").Activate Range("1:1").Delete End Sub 2.Like演算子使用 マクロのあるブックにシート"抽出"を用意しておく。 Sub XMLextract2() Dim FSO, XmlFile, MatchPattern, ExTop, ExRow, Line1 Set FSO = CreateObject("Scripting.FileSystemObject") Set XmlFile = FSO.OpenTextFile("C:\XmlFile.xml") 'XMLファイル Set ExTop = ThisWorkbook.Worksheets("抽出").Range("A1") ExRow = 1 MatchPattern = "<p name=""test"">*" 'マッチングパターンをここに設定 ExTop.EntireColumn.ClearContents Application.ScreenUpdating = False Do While XmlFile.AtEndOfLine = False Line1 = XmlFile.ReadLine If Line1 Like MatchPattern Then ExTop.Cells(ExRow, 1).Value = Line1 ExRow = ExRow + 1 End If Loop Application.ScreenUpdating = True End Sub

関連するQ&A

  • VBAで複数ファイルからのデータ抽出を行いたい。

    すみません、知恵をお貸しください。 VBA初心者です。 一つの同じフォルダ内にあるエクセルの同じ形式の複数ファイル(*.xls)から、データを抽出し(例.A2:k2)一つのファイルを作成したいのですが、どうにか一行目だけを抽出することができました。 しかし、データ抽出をしたい複数ファイルの中には(A2:k2)だけではなく、複数行に渡りデータが入っているもの(A3:k3まで、やA5:k5までなど)があり、それら全てを抽出したいのです。 何らかの条件付けの上でループをさせればいいのかな?とも考えたのですが、うまくいきません。 どうかご教授お願いします。

  • XMLからデータを取得

    いつもお世話になっております。 XMLファイルに含まれたデータの中から、特定のデータを検索するプログラムを作りたいと思っております。 <AAA Name="テスト">    <BBB x="2" y="2"></BBB>    <CCC Num="0001"></CCC>    <CCC Num="0002"></CCC> </AAA> XMLデータの形式は↑みたいな感じで、これが100以上あり、CCCタグは0~5個までです。 フォームにテキストボックスを配置し、そこに検索したい語句を入れ、 AAAタグのNameの中身と合致したら、BBB、CCCの属性をすべて取得して表示するということをしたいのですが、 どうにも上手くいきません。 VB2008を使用しております。 方法をご存知の方、ご教授ください……orz

  • excel vbaでのxml出力がわかりません

    EXCEL VBAでAPIを使い、XMLファイルを出力するプログラムを作っているのですが、うまくいきません。 機能としましては、指定したセルの範囲内にユーザーが入力した値を、XMLファイルとして出力するというものです。 ただXMLファイルを出力するだけなら自力でできたのですが、XMLファイルにセルの値を入れることができません。 どなたかご教授願います。

  • VBAでEXCELファイルからデータを抽出する方法

    VBAで、サーバーにある大量のデータを含むCSVファイルから、ある条件に一致するデータを抽出する方法を教えてください。 (例)  コード   名称  在庫数  その他データ  A12300  ○○○  999   XXXXXXXX  A12400  ○○○  999   XXXXXXXX  B12500  ○○○  999   XXXXXXXX  B11100  ○○○  999   XXXXXXXX  C11200  ○○○  999   XXXXXXXX 上記データからコードの一桁目が「A」と「C」のものを抽出する場合の、VBAを教えてください。 抽出後、EXCELの別ファイルに上書き保存します。 デイリーで処理をするので、VBAで自動化したいのです。 よろしくお願い致します。

  • 別々のフォルダに収められているXMLファイルから特定のノードを抽出する方法

    XMLデータを検索、抽出する場合の方法について教えて下さい。 複数のXMLファイルが100以上の複数のフォルダに収められています。 (フォルダは作成日時となっており、規則性があります) 別々のフォルダに収められているXMLファイルから特定のノードを抽出する場合にはどのような方法で行うのが良いのでしょうか? Xqueryがよいのでしょうか?それともXSLTが良いのでしょうか? いろいろ調べてみましたが、異なるフォルダから特定のノードを検索、抽出する方法が見つかりませんでした。 どなたかご教授いただきたく、よろしくお願いします。 なお、これから学習するような状況ですので、良い本なども教えて頂けるとありがたいです。

    • 締切済み
    • XML
  • Excel VBA テキストファイルからの抽出

    Excel VBAにて、テキストファイルから文字列を選別して、それをエクセルファイルのテキストボックスに張り付けるコードの記述をご教授いただけますでしょうか。 環境はWindows7 Pro Excel2010 下記テキストファイルです。 test.txt IDENTIFICATION DIVISION. PROGRAM-ID. sample AUTHOR. XXX * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT A ASSIGN TO B SELECT C ASSIGN TO D DATA DIVISION. FILE SERECTION. この FILE-CONTROL.と DATA DIVISIONの間に挟まれている SELECT A ASSIGN TO B SELECT C ASSIGN TO D この2行を取り出して、エクセルファイル上にあるテキストボックス張り付ける処理です。 よって、FILE-CONTROL.と DATA DIVISION.の間にある不特定多数の行を抽出するロジックです。 テキストボックスに張り付ける前の行を抽出するだけでも、ご教授頂けたら幸いです。 よろしくお願いします。

  • エクセル データの抽出について

    エクセル データの抽出について エクセルでピッポットテーブルを作成し、その中のデータを抜き出したいのですがどうしたらよろしいのでしょうか? エクセルの基本的な知識はあるのですがVBAについてはほとんど知識がありません。 こんな感じのデータです   条件1 条件2 条件3 条件4 (1)  1         2 (2)       3             (3)  5 これを 1 条件1 (1) 2 条件3 (1) 3 条件2 (2) 5 条件1 (3) という風にしたいのですが。 縦・横の条件は100以上あり、ピッポットの合計で表されている数字は300個くらいです。 今までは手で拾っていましたが時間がかかりすぎるためにどうにかしたいと思っています。 分かりにくい質問かもしれませんがご回答宜しくお願いします。

  • C#にてlistView1からXMLファイルへ書込み方法について

    C#にてlistView1からXMLファイルへ書込み方法について 1  2  3  4 5 6 7 8 1 Aさん 50 男 2 Bさん 40 女 3 Cさん 60 男 と書かれていて XMLファイルの中身は、 <?xml version="1.0" encoding="utf-8"?> <Data> <p id="1" name="Aさん" age="50" seibetu="男"></p> </Data> この様なXMLファイルでlistView1にあるデータを全て書込みしたいのですが、どうしたら出来ますか? どなたか申し訳ありませんが、プログラムソース教えて戴けませんか?お願いいたします。

  • エクセルでデータ抽出し、別のファイルを作成したいのですがVBAを勉強し

    エクセルでデータ抽出し、別のファイルを作成したいのですがVBAを勉強しないと出来ませんか? 例えば、エクセルで作成した顧客名簿には氏名、年齢、生年月日、住所、電話番号が入力されており、そこから1960-1980年生まれで住所が大阪府の人をセレクトし、別のエクセルデータに出力するとしたらどうすればいいのでしょう? 昔にCOBOLをかじったことがあり、頭の中ではすごく簡単な作業に思えるのですが・・・ よろしくご教授願います

  • 複数のXMLファイルからのデータ抽出

    いつもお世話になっております。 .netFramework + C#環境で、XMLを使用して、Webページにリストを表示させるプログラムを考えています。 (正確には、XMLファイルのあるタグの中のデータを一覧で表示させたい。) 何が問題かというと、このXMLファイルが複数あり、しかもフォルダが階層化されている ということです。 幸いなことにフォーマットは同じなので、その点は問題ないのですが、複数の人間がその都度フォルダにXMLファイルを追加するので、ファイル名を指定して、プログラムを書くことが難しい状況です。 .net Framework のFileSystemObjectをうまく使えないかと考えています。 よろしくお願い致します。

専門家に質問してみよう