2017-07-26 6 views
1

「FIND」の式や、あるセルの文字列を別のセルに見つけるのに役立つ式を正しく使用する方法の答えを探しています。セルに複数の検索語が含まれているかどうかを確認する方法

I use the find formula to find these: 
=IF(FIND(A1,B1),"yes","no") 
Col1 - Col2 
A,B - A,B,C = formula works well 
A,C - A,B,C = formula not working. Returning "#VALUE" 

ありがとうございました。

+0

'#VALUE! 'の代わりに期待される結果は何ですか?それを排除するだけなら、 'ISERROR'を使ってエラー値を扱うことができます。それ以外の場合、* A *と* C *がテキストに含まれているため、期待値が 'YES 'のままであれば、別の方法で式を書く必要があります。 – L42

+0

配列にA、Cがあるので、私もyesの結果を得たいです。 – Mark

+0

UDFを使用したVBAソリューションでも問題ありませんか? – Mrig

答えて

1

FINDは、Col1からの完全な文字列がCol2に含まれているかどうかをチェックするだけです。 すべての項目をチェックする場合は、何らかの理由で文字列をコンマで分割する必要があります。

+0

新しい列を追加せずに文字列を分割できる方法はありますか?つまり、数式だけを使って分割することです。 – Mark

1

VBAを使用しても問題ありませんが、関数を使用して上記を達成できれば、次のコードをUDFとして使用できます。

Function FindExistence(firstStr As String, secStr As String) As String 
    Dim firstArr() As String, secArr() As String 
    Dim i As Long, j As Long 
    Dim fElem As Variant, sElem As Variant 
    Dim isExist As Boolean 

    firstArr = Split(firstStr, ",") 'comma separated values of first cell into array 
    secArr = Split(secStr, ",")  'comma separated values of second cell into array 
    For Each fElem In firstArr  'loop through each element in array of first array 
     isExist = False    'set boolean variable to False 
     For Each sElem In secArr 'loop through each element in array of second array 
      If fElem = sElem Then 'check if elements in both array are equal 
       isExist = True  'if elements are equal exit loop, check next element 
       Exit For 
      End If 
     Next sElem 
     If Not isExist Then Exit For 'if isExist is false exit all loop 
    Next fElem 
    If Not isExist Then    'if isExist is false return No else Yes 
     FindExistence = "No" 
    Else 
     FindExistence = "Yes" 
    End If 
End Function 

参照のために画像を参照してください。 thisを参照してください関数を作成する方法について

enter image description here

2つのExit Forの代わりにGoToを使用することもできます。

1

これは、関連するパターンセルと関数セルの間の「相対的な距離」を維持することに制限を受け入れることができれば、上に提示したUDFアプローチに代わる奇妙な方法です。私のアプローチでは、定義済みの数式(相対セル参照を含む)の名前を定義する必要があります。

次のサンプルコードでは、セル内の検索式を使用すると仮定します。C2とコンマ区切りのパターンは、隣接するセルに保存されています(相対的です)。

ここでは、以下の「名前」を定義できます(<cntrl> <F3>)。

one: =LEFT(Sheet1!B2;FIND(",";Sheet1!B2)-1) 
oneR: =MID(Sheet1!B2;FIND(",";Sheet1!B2)+1;LEN(Sheet1!B3)) 
two: =LEFT(oneR;FIND(",";oneR & ",")-1) 
three: =MID(oneR;FIND(",";oneR & ",")+1;LEN(oneR)) 

3つ以上の部分に興味がある場合は、サンプルを延長できます。式セルでは(C2、直接パターンセルの右側に常に1)私は今、パターンのすべての3つの単語がターゲットセルストリング(D2)で発生するかどうかを確認するために

=IFERROR(AND(FIND(one;D2);FIND(two;D2);FIND(three;D2));0;1) 

を書くことができます。 3つのパターンがすべて見つかった場合、結果は1、それ以外の場合は0が返されます。

0

ここには、のno-column-helperがあり、ゼロVBAが保証されています。
以下に示すように、私は配列数式を使用します。

 
= LEN(SUBSTITUTE(A2,",","")) 
= SUM(
    --ISNUMBER(
       MATCH(
        MID(
         SUBSTITUTE(A2,",",""), 
         ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A2,",","")))), 
         1), 
        MID(
         SUBSTITUTE(B2,",",""), 
         ROW(INDIRECT("1:"&LEN(SUBSTITUTE(B2,",","")))), 
         1), 
        0) 
       ) 
    ) 

それが動作しない方法は?

  • まず、我々はそれに一致するものを一つずつ確認することができるように配列に、あなたの文字列中のすべての文字を取得する方法が必要です。我々は、以下の式を使用していることを行う:

    MID(
        SUBSTITUTE(A2,",",""), 
        ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A2,",","")))), 
        1) 
    

    一般的なロジックはなく<start_num>に1つの数値を割り当てる、我々はROW(INDIRECT("1:"&LEN(SUBSTITUTE(A2,",",""))))を使用して数値の配列を割り当てるMID(<text>,<start_num>,<num_chars>)です。わかりやすい形式では、ROW([reference])です(たとえば、ROW(1:10)は1から10までの数字の配列、10個の要素からなる配列)。しかし、この式を有効にするには、配列のサイズが、作業中の文字数と等しく、,カンマを除いていることを確認する必要があります。したがって、最初にSUBSTITUTE(A2,",","")を使用してカンマを削除し、結果の文字列の長さをメモリに取得します。あなたはセルA2にテキストA、Cを持っている場合たとえば、その後SUBSTITUTE機能は、(メモリに)ACをもたらすとLEN戻ります。2.その後、我々は我々のアレイの境界として、その戻り値を使用を使用してその長さを取得します。 "1:"と連結し、有効な参照を返すようにするには、INDIRECT関数を使用します。我々は試合の検索文字列(例えば、セルB2A、B、Cは、我々はあまりにも、配列のそれを配置する必要があります含まれている)MATCH機能を使用して

  • 行動の検索のために上記繰り返し

  • 。ここでは、上記の2つのステップを使用して生成した値の配列を使用します。 MATCH(<lookup_value>,<lookup_array>,[match_type])は一般的な形式です。幸いにも、単一の値ではなく、<lookup_value>の値の配列を使用することもできます。したがって、上記のステップ1で得られた配列をlookup_valuesとして使用します。

  • 次に、ISNUMBERを使用して一致数を確認します。 MATCH関数は数値(配列内の一致した値の位置)を返します。したがって、単にISNUMBERを使用して評価します。これはブール値の配列{TRUE,FALSE,TRUE}を返しますが、何とかカウントする必要があるので、ダブルネゲート--を使用して、{1,0,1}の数値に変換します。

  • 最後のステップは、一致の数を数えて、それをコンマなしの検索文字列の長さと比較するだけの、SUM関数です。我々は

  • またCtrl + Shift + Enterキーを使用して式を確認し、あなたはすべての一致が見つかったかどうかを確認する最終段階でAND機能を使用することができます。

EDIT1:すべての一致が見つかった場合は、直接評価するANDを用いて式。セルA2のすべての文字がセルB2に設定されているすべての文字に発見された場合

 
= AND(
     ISNUMBER(
       MATCH(
        MID(
         SUBSTITUTE(A2,",",""), 
         ROW(INDIRECT("1:"&LEN(SUBSTITUTE(A2,",","")))), 
         1), 
        MID(
         SUBSTITUTE(B2,",",""), 
         ROW(INDIRECT("1:"&LEN(SUBSTITUTE(B2,",","")))), 
         1), 
        0) 
       ) 
    ) 

これはTRUEを返します。これは、コンマで区切られた単一の文字列の場合にのみ機能します(例:A,K,E,G)。A,B,C,D,E,F,G,H,I,J,Kで検索します。これは、コンマで区切られていない文字列(例:A,BC,D,EFG,H,I,JBC,I)です。私はこれがあなたになることを願っています。

関連する問題