Excel - добавьте формулу Excel в FilterXML

Nov 05 2020

У меня есть таблица Excel, содержащая список строк в одном столбце. Список строк состоит из нескольких чисел разной длины, разделенных «/» и «;» Первая запись строки - это идентификатор кода (который всегда имеет длину 3) (красный в примере), за которым следует «/», затем количество (которое различается по длине) (зеленый в примере), за которым следует «;» если строка продолжается.

Теперь с помощью члена я могу выделить зеленое число по следующей формуле:

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

Однако мне все еще нужна другая формула, которая умножает зеленое число на переменную, если условие выполнено.

Пример функции:

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

Есть ли способ совместить обе эти функции?

Ответы

1 JvdV Nov 05 2020 at 13:56

Очень хороший способ справиться с этим - присвоить полный массив имени, скажем, переменной через LET(). Таким образом, ваша формула B2станет:

=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)),"")

Однако для этого требуется Excel O365. Но поскольку вы переносите массив, похоже, он у вас есть.