Excel - Adicione uma fórmula do Excel em FilterXML

Nov 05 2020

Eu tenho uma planilha do Excel contendo uma lista de strings em uma coluna. A lista de strings é composta por vários números de comprimentos variados, separados por “/” e “;” A primeira entrada da string é um id de código (que sempre tem um comprimento de 3) (vermelho no exemplo) seguido por um “/” e uma quantidade (que varia em comprimento) (verde no exemplo) seguido por um “;” se a string continua.

Com a ajuda de um membro, agora posso isolar o número verde com a seguinte fórmula:

=IF(ISBLANK(A4);"";TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A4;"/";";");";";"</s><s>")&"</s></t>";"//s[position() mod 2 = 0]")))

No entanto, ainda preciso de outra fórmula que multiplique o número verde por uma variável, se uma condição for atendida.

Função de exemplo:

=IFS(B2<=10;B2*1,25;B2<=20;B2*1,18;B2<=100;B2*1,05;B2<=250;B2*1,01;B2>250;B2)

Existe uma maneira de combinar essas funções?

Respostas

1 JvdV Nov 05 2020 at 13:56

Uma maneira muito boa de lidar com isso é atribuir o array completo a um nome, digamos uma variável, por meio de LET(). Portanto, sua fórmula B2se tornaria:

=IF(A2<>"",LET(MNT,TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A2,"/",";"),";","</s><s>")&"</s></t>","//s[position() mod 2 = 0]")),IFS(MNT<=10,MNT*1.25,MNT<=20,MNT*1.18,MNT<=100,MNT*1.05,MNT<=250,MNT*1.01,MNT>250,MNT)),"")

No entanto, requer Excel O365. Mas, como você está transpondo a matriz, parece que você tem isso.