Eu tenho um column A
que parece com:
11
11 11
5 6
5 5
5 6 6 5
11 11 11 11
6 7 8
3
3 2 3
e buscando uma maneira alternativa e mais inteligente de produzir TRUE
/ FALSE
conforme mostrado aqui:
resultado desejado | |
---|---|
11 | verdadeiro |
FALSO | |
11 11 | verdadeiro |
5 6 | FALSO |
5 5 | verdadeiro |
5 6 6 5 | verdadeiro |
11 11 11 11 | verdadeiro |
FALSO | |
6 7 8 | FALSO |
3 | verdadeiro |
3 2 3 | verdadeiro |
A lógica é:
FALSE
se- a célula está vazia
- não há números duplicados por célula
TRUE
se- a célula tem apenas um número
- a célula tem dois ou mais números duplicados, independentemente da ordem
Mais notas:
- os números são separados por espaço
- os números podem variar de 1 a 80
- cada célula pode conter no máximo 40 números separados por espaço
- cada célula pode conter no mínimo 1 número ou estar vazia
Como posso resolver isso:
Posso somar (de várias maneiras - LAMBDA
, QUERY(SUBSTITUTE(
, SUM(SPLIT(
, ...) e dividir por contagem. Se o resultado for um número inteiro TRUE
, é , se o resultado tiver casas decimais, é , FALSE
mas isso não funcionará para 3 2 3
, 6 7 8
.
Outra maneira seria dividi-lo e usar QUERY
e contar números por linha, agrupar por row_numbers e pivotar por all_numbers, e LET
então envolvê-lo em IF
e remover números menores que 2
. Em seguida, combiná-lo com TRIM(TOCOL(QUERY(TRANSPOSE(
e LEN
. Então IF
, como >0
está, TRUE
e adicionar o restante da lógica para casos não cobertos por QUERY
.
A fórmula seria enorme de qualquer maneira, então estou procurando uma maneira "mais inteligente/curta" (se houver). Talvez haja algum padrão mágico de expressão regular com o qual eu não esteja familiarizado?