В Range K9:K16
все значения из Column H
, которые соответствуют критериям столбца в Range K4:K6
и Range L4:L6
, перечислены на основе этой формулы:
=SORT(
LET(
a;COUNTIF(K4:K6;A1:A20)+AND(K4:K6 = "");
b;COUNTIF(L4:L6;C1:C20)+AND(L4:L6 = "");
FILTER(FILTER(A1:J20;(A1:J1=N4);"");a*b;""));;-1)
В Range L9:L16
я хочу:
Range K9:K16
иreturn_array
в Cell N6
.Формулы из этого вопроса уже близки к результату:
Опция 1
=CHOOSECOLS(SORT(FILTER(CHOOSECOLS(A3:I20;XMATCH(N4;A1:I1);XMATCH(N6;A1:I1));COUNTIFS(K4:K6;A3:A20;L4:L6;C3:C20));;-1);2)
Вариант 2
=LET(
a, K9:K16,
b, A1:I1,
c, A3:I20,
d, XLOOKUP(N4,b,c,""),
MAP(a,LAMBDA(α, @DROP(TOCOL(FILTER(IFS((d=α)*
(1-ISNA(XMATCH(A3:A20,K4:K6)+XMATCH(C3:C20,L4:L6))),
IF(c=0,x,c)),N6=b,""),3),
COUNTIF(K9:α,α)-1))))
Однако, когда, например, Range K4:K6
или Range L4:L6
пусто и список в диапазоне K9:K16
подстраивается под него, обе формулы для Range L9:L16
возвращают ошибку #CALC!
?
Как мне нужно их изменить, чтобы они настраивались на основе списка в Range K4:K6
?
COUNTIF(K4:K6;A1:A20) * COUNTIF(L4:L6;C1:C20)
означает (Product = D or G) AND (shop = 1 or 3)
; в то время как COUNTIFS означает (Product = D and Shop =1) OR (Product = G and Shop =3)
. Я заметил, что все полученные вами ответы предполагают первое. Надеюсь, это то, чего вы хотите.
Я думаю, вы имеете в виду, если пусто, чем перечислить все?
В таком случае:
=SORT(FILTER(CHOOSECOLS(A3:I20,XMATCH(N4,A1:I1),XMATCH(N6,A1:I1)),(AND(K4:K6 = "")+COUNTIF(K4:K6,A3:A20))*(AND(L4:L6 = "")+COUNTIF(L4:L6,C3:C20)),""),,-1)
Или:
=LET(x,LAMBDA(a,b,AND(a = "")+COUNTIF(a,b)),
SORT(FILTER(CHOOSECOLS(A3:I20,XMATCH(N4,A1:I1),XMATCH(N6,A1:I1)),x(K4:K6,A3:A20)*x(L4:L6,C3:C20)),,-1))
Возможно, я не совсем ясно понял, если оба ColCrits
пусты, то почему бы не вернуть выходные данные на основе lookup_array
и return_array
, одновременно сопоставляя list
соответственно, как возврат всего столбца H помогает в этом сценарии, не отклоняясь от других условий ?:
=LET(
a, K9:K16,
b, A1:I1,
c, A3:I20,
d, XLOOKUP(N4,b,c,""),
e, (1-ISNA(XMATCH(A3:A20,K4:K6)*XMATCH(C3:C20,L4:L6))),
MAP(a,LAMBDA(α, @DROP(TOCOL(FILTER(IFS(IF(SUM(e)=0,(d=α),(d=α)*e),
IF(c=0,x,c)),N6=b,""),3),
COUNTIF(K9:α,α)-1))))
Обновлять:
=LET(
a, K9:K16,
b, A1:I1,
c, A3:I20,
d, XLOOKUP(N4,b,c,""),
e, (1-ISNA(XMATCH(A3:A20&"|"&C3:C20,K4:K6&"|"&L4:L6))),
IFERROR(MAP(a,LAMBDA(α, @DROP(TOCOL(FILTER(IFS(IF(SUM(e)=0,(d=α),(d=α)*e),
IF(c=0,x,c)),N6=b,""),3),
COUNTIF(K9:α,α)-1))),""))
Решение работает, когда CoCrti1 и ColCrit2 пусты. Если хотя бы один из них пуст, список не соответствует Ragne K9:K16.
@Мичи, видишь обновление, это то, о чем ты просишь?
Также лучше уточнить, как вы хотите применять ColCrit1 и ColCrit2. например вам нужны строки, где
(Product = D and Shop =1) OR (Product = G and Shop =3)
или где(Product = D or G) AND (shop = 1 or 3)
.