Corresponde a vários valores separados por vírgula em uma célula

1

Com base nos valores das duas primeiras colunas, preciso preencher a terceira coluna (marcada com amarelo).

É algo assim possível sem usar o VB?

    
por user3760419 04.07.2018 / 17:26

1 resposta

2

EDITAR:

Se houver sempre quatro equipes com dois vencedores e dois perdedores, existe uma solução relativamente mais simples:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&",",LEFT(B1,FIND(",",B1)),""),MID(B1,FIND(",",B1)+1,LEN(B1))&",","")&",",",,","")

Sim, isso é possível apenas com uma fórmula de matriz. Não é exatamente simples, no entanto.

A seguir, uma solução geral que funciona com qualquer número de participantes e equipes vencedoras:

Matrizentra(Ctrl+Desloca+Enter)aseguintefórmulaemC2ecopia-cola/fill-downnorestodacolunadatabela(nãoseesqueçaderemovero{e}):

{= TEXTJOIN( ",", TRUE, IF( MMULT( --( TRIM(MID(SUBSTITUTE(A2&",",",",REPT(" ",LEN(A2)+1)),(ROW(INDEX(C:C,1):INDEX(C:C,(LEN(A2)+1)/2))-1)*(LEN(A2)+1)+1,LEN(A2)+1)) =TRANSPOSE(TRIM(MID(SUBSTITUTE(B2&",",",",REPT(" ",LEN(B2)+1)),(ROW(INDEX(D:D,1):INDEX(D:D,(LEN(B2)+1)/2))-1)*(LEN(B2)+1)+1,LEN(B2)+1))) ), ROW(INDEX(C:C,1):INDEX(C:C,1+LEN(B2)-LEN(SUBSTITUTE(B2,",","")))) ), "", TRIM(MID(SUBSTITUTE(A2&",",",",REPT(" ",LEN(A2)+1)),(ROW(INDEX(C:C,1):INDEX(C:C,(LEN(A2)+1)/2))-1)*(LEN(A2)+1)+1,LEN(A2)+1)) ) )}

Observe que TEXTJOIN() está disponível apenas no Excel 2016. Nas versões anteriores do Excel, é necessário um UDF de preenchimento de poliforços. (Veja este post para um básico.)

Explicação:

em breve

Por enquanto, esperamos que a seguinte versão parcialmente avaliada da fórmula em C2 possa ajudar:

{=
TEXTJOIN(
  ",",
  TRUE,
  IF(
    MMULT(
      --(
        {"A";"B";"C";"D"}
        ={"A","C"}
      ),
      {1;2}
    ),
    "",
    {"A";"B";"C";"D"}
  )
)}
    
por 04.07.2018 / 18:33