web-dev-qa-db-ja.com

セルに値の配列が含まれているかどうかを確認する方法は?

TL; DRSEARCH(search_for, text_to_search)を使用すると、 "search_for"は可変長配列です。

Googleスプレッドシートには、4つのセル、E1:E4があります。各セルの値は次のとおりです。

 | E | 
-+ ------------ + 
 1 |ティム| 
 2 |フランク| 
 3 |ティム、フランク| 
 4 |ジェニファー| 
-+ ------------ + 

ARRAY1と呼ばれる配列もあります。 ARRAY1の値は{Tim; Frank}です。

私が探しているのは、EセルにARRAY1の値が含まれているかどうかを示すブール値を与える数式です。現在の例では、{TRUE; TRUE; TRUE; FALSE}を返す必要があります。これは、FILTER数式で使用されます。

ARRAY1に1つの値が含まれている(配列ではない)場合にうまく機能する素敵な小さな式があります。

=arrayformula(isnumber(search(ARRAY1,E1:E4)))

たとえば、ARRAY1が{Tim}の場合、{TRUE; FALSE; TRUE; FALSE}を返します。

ただし、この例ではARRAY1には2つの値が含まれています。実際には、E:Eと同様に、可変数の値が含まれています。

FILTER関数はE1:E4のそれぞれを自動的に実行するため、配列を配列と比較することを求めていません。したがって、それは単一の参照と見なすことができます-私の知る限り。

ARRAY1を{Tim; Frank}に変更すると、{FALSE; FALSE; FALSE; FALSE}になります。

私が本当に何をしているか見当もつかない。

誰も私を助けることができますか?

3
rossjkw

簡潔な答え

SEARCHの代わりにREGEXMATCHとJOINを使用します。

説明

SEARCHは、部分文字列を他の文字列に検索するためのものであり、配列で使用する場合、両方のパラメーターは同じサイズの配列である必要があります。

JOINを使用すると、REGEXMATCHで使用される正規表現を作成できます。最初のパラメーターが配列で、ARRAYFORMULA内にネストされている場合、TRUE/FALSEの配列を返します。

OPの例を考慮すると、使用される式は

=ArrayFormula(REGEXMATCH(E1:E4, JOIN("|",{"Tim","Frank"})))
2
Rubén

編集:申し訳ありませんが、E3の値にTimとFrankの両方が含まれていることは確認しませんでした。 [その他の回答]( https://webapps.stackexchange.com/a/91342/8816 を参照してください

簡潔な答え

SEARCHの代わりにMATCHを使用します。

説明

SEARCHは、部分文字列を他の文字列に検索するためのものであり、配列で使用する場合、両方のパラメーターは同じサイズの配列である必要があります。

一方、MATCHは異なるサイズの配列を持つことができます。

OPの例を考慮すると、使用される式は

=ARRAYFORMULA(ISNUMBER(MATCH(ARRAY1,E1:E4,0))
1
Rubén