it-swarm.com.de

Wie überprüfe ich, ob eine Zelle ein Array von Werten enthält?

TL; DR: Mit SEARCH(search_for, text_to_search) ist "search_for" ein Array variabler Länge.

In Google Sheets habe ich vier Zellen, E1: E4. Die Werte in jeder Zelle lauten wie folgt:

 | E | 
 - + ------------ + 
 1 | Tim | 
 2 | Frank | 
 3 | Tim, Frank | 
 4 | Jennifer | 
 - + ------------ + 

Ich habe auch ein Array, das wir ARRAY1 nennen werden. Der Wert von ARRAY1 ist {Tim; Frank}.

Was ich suche, ist eine Formel, die mir einen booleschen Wert gibt, der mir sagt, ob die E-Zelle einen der Werte von ARRAY1 enthält oder nicht. Im aktuellen Beispiel sollte {TRUE; TRUE; TRUE; FALSE} zurückgegeben werden. Dies wird dann in einer FILTER-Formel verwendet.

Ich habe eine nette kleine Formel, die großartig funktioniert, wenn ARRAY1 1 Wert enthält (dh kein Array ist):

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

Wenn ARRAY1 beispielsweise {Tim} ist, wird {TRUE; FALSE; TRUE; FALSE} zurückgegeben.

In diesem Beispiel enthält ARRAY1 jedoch zwei Werte. In Wirklichkeit enthält es eine variable Anzahl von Werten - ebenso wie E: E.

Ich möchte kein Array mit einem Array vergleichen, da die FILTER-Funktion automatisch jedes E1: E4 durchläuft. Das kann also als eine einzige Referenz betrachtet werden - soweit ich weiß.

Wenn Sie ARRAY1 in {Tim; Frank} ändern, wird {FALSE; FALSE; FALSE; FALSE} angezeigt.

Ich habe keine Ahnung, was ich wirklich tue.

Kann mir jemand helfen?

3
rossjkw

Kurze Antwort

Verwenden Sie anstelle von SEARCH REGEXMATCH und JOIN.

Erläuterung

SEARCH dient zum Suchen von Teilzeichenfolgen in anderen Zeichenfolgen. Wenn es mit Arrays verwendet wird, sollten beide Parameter gleich groß sein.

JOIN kann verwendet werden, um einen regulären Ausdruck für REGEXMATCH zu erstellen, der seinerseits ein Array von TRUE/FALSE zurückgibt, wenn der erste Parameter ein Array ist und in einer ARRAYFORMULA verschachtelt ist.

In Anbetracht der OP-Beispiele lautet die zu verwendende Formel

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

EDIT: Sorry, ich habe nicht gesehen, dass der Wert von E3 sowohl Tim als auch Frank enthält. Siehe meine [andere Antwort] ( https://webapps.stackexchange.com/a/91342/8816

Kurze Antwort

Verwenden Sie anstelle von SEARCH MATCH.

Erläuterung

SEARCH dient zum Suchen von Teilzeichenfolgen in anderen Zeichenfolgen. Wenn es mit Arrays verwendet wird, sollten beide Parameter gleich groß sein.

Andererseits könnte MATCH Arrays unterschiedlicher Größe haben.

In Anbetracht der OP-Beispiele lautet die zu verwendende Formel

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