戻る  □VBAのサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
複数の条件から該当する文字列を抽出する方法について

    [131331] 複数の条件から該当する文字列を抽出する方法について-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ 夜中まで頑張ってみたけどあきらめた -(2020/05/10(03:46))
    □U R L/
      はじめまして、説明が下手なので分かりにくいとは思いますがよろしくお願いいたします。
      
      Sheet1に下記のようなデータがあります。
      
      C列     D列
      
      <ROW>
              <ID>1</ID>
              <name1><![data[あああああ]]</name1>
              <name2><![data[いいいいいいい]]</name2>
              <som>1515</som>
              <name4><![data[えええ]]</name4>
      </ROW>
      <ROW>
              <ID>2</ID>
              <namea><![data[おおおお]]</name1>
              <name1><![data[かかか]]</name2>
              <nameb><![data[ききききき]]</name3>
              <name4><![data[くくくくく]]</name4>
      </ROW>
      
      このような形で、IDが数万個あり、それに対してnameに当たる部分が、数個から数十個あるデータがあります。
      
      
      
      
      Sheet2のA列にはSheet1<ID>数値</ID>の数値のみが、書かれているものがありますが、連番ではなく、必要のないIDが抜けていたり、順番も数値の小さいものから順に並んでするわけではありません。C列以後はいろいろなデータが入っています。
      
      
          A列   B列
      1行目  1
      2行目  5
      2行目  6
      4行目  3
      5行目  4
      から
      数千行
      
      こんな感じで、この順番を変更することはできません。
      
      この場合、Sheet2の A列1行目の 数値と同じ数値を持つ Sheet1の<ID>数値</ID>を検索して
      <name2><![data[ と ] の中の文字のみを 抜き取って B1に書き込むことはできないでしょうか?
      
      ただ、かっこの中の文字列にも数字が入ることがあり、ID番号と同一になることもあるので、
      Sheet3に Sheet2のID番号と同じ行に="<id>"&A1&"</ID> のようにして、それを検索ワードとして シート3で いくつかの工程を経た結果を Sheet2のこの場合B1に反映させることは問題ありません。
      
      VLOOKUPやMACHなど使っていろいろやってみたのですが、検索したIDから最初に出現する <name2>の更に<name2><![data[ ]で囲まれた 中身だけ取り出すというのがどうしてもできませんでした。
      また、該当IDが存在しない場合や、存在しても該当するname番号がない場合もありますのでこの場合は エラー表示でもあると助かります。(空白だと目視チェックしにくいので・・・)
      
      
      
      私が挑戦した内容。もっといい方法があるのかもしれませんが、シート3で何段階かに分けて 結果を導こうとしました。
      
      =MID(D42,FIND("<mame1><![DATA[",D42)+14,FIND("]",D42)-FIND("<Name1><![CDATA[",D42)-14)
      行がわかればこんな感じで文字だけ取り出せる。 ここのセル番号の所を下のような感じで取り出せないか?
      
      =MATCH("*"&"<name1><![DATA["&"*",D41:D571,0)
      範囲が分かれば、範囲の何行目かはわかるけど、複数列を指定するとエラーになる。
      
      ただ、セル番号で取得する方法が分からないのと、単列検索はできれば避けたいけど複数列で検索できない場合は災厄列は手動でそろえようと思いました。
      
      
      <ID>番号 から 最初の</row>の範囲を取得しないとならないと推測するがその方法が分からない。それが分かれば上で使えると思いました。
      
      順番が逆になっていますが、できることからやってみた結果です。結果さえ出れば上のような手順を踏む必要もないです。
      
      OS    = windows10.0.18363 Pro
      Excel = 2010
      
      
      
      




    [131332] Re[1]: 複数の条件から該当する文字列を抽出する方法について-

    記事引用/メール受信=OFF■

    □投稿者/ �ス髓�ソスワで頑張�ス�ス�ストみゑソス�ス�ス�スヌゑソス�ス�ス�ス�ス゚ゑソス -(2020/05/10(03:59))
    □U R L/

      紛らわしい書き方があったので追加します。

      =MATCH("*"&"<name1><![DATA["&"*",D41:D571,0)
      範囲が分かれば、範囲の何行目かはわかるけど、複数列を指定するとエラーになる。

      と書かれた 複数列の意味ですが、Sheet1のデータはXMLなのですが、部分的に手書きで書かれています。
      通常はTABでそろえているのですが、もしかしたらスペース等でそろえられている可能性もあるからで、
      エクセルに貼り付けたら列がずれるかもしれないと懸念したからです。
      この部分は置き換えなどで合わせこみますので無視していただいても構いませんが、
      合わせこみをしなくてもいいならそれに越したことは無いという程度のことです。

      以上 よろしくお願いいたします。




    [131333] Re[2]: 複数の条件から該当する文字列を抽出する方法について-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2020/05/11(18:07))
    □U R L/
      <ROW>
              <ID>2</ID>
              <namea><![data[おおおお]]</name1>   ←
              <name1><![data[かかか]]</name2>    ←
              <nameb><![data[ききききき]]</name3>  ←
              <name4><![data[くくくくく]]</name4>
      </ROW>
      
      本当にそんな風に左右のタグが対応してないってことがあるんですか?
      
      あるとして、このIDにはname2がない、と判断するんですね?
      
      取り出したいのは本当にname2ですね? (name1じゃなく)
      
      上の例だと、エクセルは何行に入っているんですか?(3行/7行?)




    [131564] Re[3]: 複数の条件から該当する文字列を抽出する方法について-

    記事引用/メール受信=OFF■

    □投稿者/ あああああ -(2020/08/11(00:49))
    □U R L/

      シートの全体が見えないのでわかりませんが、
      ・Sheet1のIDは1,2,3,4,……と連番で続く。
      ・抜き出したいのは、
       "<name2><![data[" と "]]</name2>" の間。
      ・name2が二つある、のようなことはない。
      ・E列より右は自由に使える。
      という前提で書きます。
      E1 = 1
      E2 = IF(C1="</ROW>",E1+1,E1)
      と入力し、E2を最終行までコピー

      G1 = 1
      G2 = 2
      …以下、全IDの件数を準備

      H1 {= CONCAT(IF(E:E=G1,D:D,""))} (←配列数式。Concatを入力した後、Ctrl+Shift+Enter)
      H2〜全IDまで上記式をコピー

      あとは、I列に自由にMID/SEARCHで抽出して、
      G:Iを対象にVlookupでもすれば、達成できるんじゃないでしょうか。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G