我想找到两个条件中只有一个为真而另一个为假的所有值。
我有一个表(Firm___Released_Job_Mats),其中包含很多内容,但对于这个公式来说重要的是它包含 1)作业名称([Job-Suff]),2)操作编号([opernum])和 3)在工作([项目])。 我想列出一个列表,显示在一项工作 (jorb1) 中使用但在第二项比较工作 (jorb2) 中未使用的所有材料。 当我使用以下代码查找他们共享的材料时,效果非常好:
=LET(
jorb1,JORB1,
jorb2,JORB2,
jobs,Firm___Released_Job_Mats[Job-Suff],
opernum,Firm___Released_Job_Mats[oper_num],
materials,Firm___Released_Job_Mats[item],
filt,FILTER(materials,jorb1=jobs),
unsharedmats,UNIQUE(FILTER(materials,(ISNUMBER(MATCH(materials,filt,0)))*(jobs=jorb2)*(opernum>19)*(opernum<28))),
unsharedoper,BYROW(unsharedmats,LAMBDA(a,INDEX(Firm___Released_Job_Mats[oper_num],MATCH(1,((a=Firm___Released_Job_Mats[item])*(Firm___Released_Job_Mats[Job-Suff]=jorb1)),0)))),
HSTACK(unsharedmats,unsharedoper))
但是当我将“jobs = jorb2”部分更改为“jobs <> jorb2”部分(在定义“unsharedmats”的行内)以查找第一份工作专有的材料列表时,它给了我一个列表所有材料,包括他们共享的材料。
通过在 Y 列中添加以下内容,我已经能够使用两个辅助列(Y 和 Z)重新创建所需的解决方案:
=CHOOSECOLS(FILTER(Firm___Released_Job_Mats,JORB1=Firm___Released_Job_Mats[Job-Suff],""),8)
(第8栏是[item]栏)
Z 列: =CHOOSECOLS(FILTER(公司___Released_Job_Mats,JORB2=公司___Released_Job_Mats[Job-Suff],""),8)
然后在 AA 列中我可以通过以下方式获得所需的输出:
=FILTER(Z6#,NOT(ISNUMBER(MATCH(Z6#,Y6#,0))))
(辅助列的数据从第 6 行开始)
但理想情况下,我想将这一切都放入我的 let 函数中,但我不确定如何实现这一点。
我尝试通过这样做将这些组合到我的let中:
=LET(
jorb1,JORB1,
jorb2,JORB2,
jobs,Firm___Released_Job_Mats[Job-Suff],
opernum,Firm___Released_Job_Mats[oper_num],
materials,Firm___Released_Job_Mats[item],
filt1,CHOOSECOLS(FILTER(Firm___Released_Job_Mats,jorb1=jobs,""),8),
filt2,CHOOSECOLS(FILTER(Firm___Released_Job_Mats,jorb2=jobs,""),8),
unsharedmats,UNIQUE(FILTER(filt1,NOT(ISNUMBER(MATCH(filt1,filt2,0)))*(opernum>19)*(opernum<28))),
unsharedoper,BYROW(unsharedmats,LAMBDA(a,INDEX(Firm___Released_Job_Mats[oper_num],MATCH(1,((a=Firm___Released_Job_Mats[item])*(Firm___Released_Job_Mats[Job-Suff]=jorb1)),0)))),
HSTACK(unsharedmats,unsharedoper))
但它返回#VALUE!
它不起作用,因为您的操作没有被过滤,并且大小与传递给 MATCH 的大小不同:
=LET(
_rng,A1:C12,
jorb1,E1,
jorb2,F1,
jorb1_arr,FILTER(_rng,CHOOSECOLS(_rng,1)=jorb1),
jorb1_m,CHOOSECOLS(jorb1_arr,2),
jorb1_op,CHOOSECOLS(jorb1_arr,3),
jorb2_arr,FILTER(_rng,CHOOSECOLS(_rng,1)=jorb2),
jorb2_m,CHOOSECOLS(jorb2_arr,2),
jorb2_op,CHOOSECOLS(jorb2_arr,3),
jorb1_us,FILTER(CHOOSECOLS(jorb1_arr,2,3),(ISERROR(MATCH(jorb1_m,jorb2_m,0)))*(jorb1_op>19)*(jorb1_op<28),{"",""}),
jorb2_us,FILTER(CHOOSECOLS(jorb2_arr,2,3),(ISERROR(MATCH(jorb2_m,jorb1_m,0)))*(jorb2_op>19)*(jorb2_op<28),{"",""}),
VSTACK(HSTACK(jorb1,""),HSTACK("Material","Operation"),jorb1_us,HSTACK("Material","Operation"),HSTACK(jorb2,""),jorb2_us))