2 返信 最新の回答 日時: Mar 13, 2014 10:24 PM ユーザー:hiro_

    値一覧にマッチした文字列を抜き出す

    yamashiro.official

      タイトル

      値一覧にマッチした文字列を抜き出す

      フォーラムに投稿

           テーブルAのフィールドAに参照元の文字列があります。

           テーブルBのフィールドBには今回ターゲットとなる文字列があります。

           テーブルBのフィールドBにテーブルAのフィールドA値一覧のいずれかにマッチした場合、

           テーブルBのフィールドCにそのマッチした文字列を抜き出したいです。

            

           例えば

            

           テーブルAのフィールドA

           aaa

           bbb

            

           テーブルBのフィールドB

           aaac

            

           テーブルBのフィールドC

           aaa

            

           入力の順番はフィールドAが先の時もあれば、フィールドBが先の時もあります。

           フィールドCは動的といった感じです。

            

           よきアイディアをよろしくお願い致します。

        • 1. Re: 値一覧にマッチした文字列を抜き出す
          sago350@未来Switch

               List関数とFilter関数で出来るかと。

                
               Filter ( "(408)555-1212" ; "0123456789" ) は、「4085551212」を返します。
               Filter ( "AaBb# ; "AB" ) は「AB」を返します。
                
                
               List(テーブルA; フィールドA) なら、改行区切りで
               aaa
               bbb
               と返します。この時のリレーションの条件は考えて下さい。
          • 2. Re: 値一覧にマッチした文字列を抜き出す
            hiro_

                 ●マッチが「前方一致」照合の意味なら、(Bの文字数は290字以下、計算結果は非保存のテキストとする)

                 Let([
                   $vl=ValueListItems(Get(ファイル名);"A値一覧");
                   $i=0;
                   $r="";
                   $f="Case(
                     $i=Length(フィールドB);$r;
                     Let([
                       $i=$i+1;
                       $r=List($r;Left(フィールドB;$i))
                       ];Evaluate($f))
                     )"
                 ];
                   FilterValues($vl;Evaluate($f))
                 )

                  

                 ●マッチが「部分一致」照合の意味なら、(A値一覧の値数は290値以下、計算結果は非保存のテキストとする)

                 Let([
                   $vl=ValueListItems(Get(ファイル名);"A値一覧");
                   $i=0;
                   $r="";
                   $f="Case(
                     $i=ValueCount($vl);$r;
                     Let([
                       $i=$i+1;
                       $t=GetValue($vl;$i);
                       $r=List($r;Case(PatternCount(フィールドB;$t);$t))
                       ];Evaluate($f))
                     )"
                 ];
                   Evaluate($f)
                 )