Excel--Let & Lambda,示例的动态数组计数

au9on6nz  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(156)

下面的公式按预期在单个单元格中生成结果列表。

=BYROW(FILTER(M4#,{1,0}),
    LAMBDA(a,
        LET(
                 varARR, SORT(UNIQUE(FILTER(FILTER(rngGapAwarded,((rngAwardedLCAT=a)*((rngEmployeeNameAwarded="TBD")+(rngEmployeeNameAwarded="")))),{0,0,0,1,1,0,0,1,0,1,1}),FALSE),4),

                 TEXTJOIN(CHAR(10),,
                     INDEX(varARR,,1)&"  "&
                     INDEX(varARR,,2)&"  "&
                     INDEX(varARR,,3)&"  POP: "&
                     TEXT(INDEX(varARR,,4),"m/d/yy")&" -- "&
                     TEXT(INDEX(varARR,,5),"m/d/yy")
                 )
           )
     )
)

我所希望的是给结果的每一"行"添加一个COUNT;如果UNIQUE结果由第一行的5个"记录"和第二行的2个"记录"组成,则显示的值将是:
| 色谱柱A|B栏|
| - ------|- ------|
| 一些LCAT|项目代码位置POP月/日/年--月/日/年和CHAR(10)的5个示例和项目2代码2位置2 POP月/日/年--月/日/年的2个示例|
| 其他LCAT|其他LCAT数据|
上述公式的结果,目前为
某个项目代码位置POP月/日/年--月/日/年项目2代码2位置2 POP月/日/年--月/日/年
在另一列中,我有一个公式,它使用以下公式提供TOTAL COUNT

=BYROW($H4#,LAMBDA(a, IFERROR(ROWS(FILTER(rngGapAwarded,((rngAwardedLCAT=a)*((rngEmployeeNameAwarded="TBD")+(rngEmployeeNameAwarded=""))))),0)))

但是我不知道如何在上面的公式中添加示例计数,以便获得详细信息。
兰迪
@联合瓣膜体积:

样本数据:

数据表:
| 线性加速器|雇员|员工ID编号|项目描述|任务|分部|差旅(是/否)|位置|SY|POP开始|POP结束|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| | | | | | | | | | | |
| 项目经理|员工姓名#1|1个|进步路|多个|第二章|数量|进步路||二○二二年三月二十一日|2023年4月4日|
| 行政助理|待定|不可用|进步路|多个|第二章|数量|进步路||二○二一年四月十二日|2023年4月4日|
| 电子技术员II|待定|不可用|进步路|多个|第二章|数量|进步路||二〇二三年二月六日|2023年4月4日|
| 二级电工|员工姓名#4|四个|进步路|多个|第二章|数量|进步路||二○二一年四月十二日|2023年4月4日|
| | | | | | | | | | | |
| 项目经理|员工姓名#1|1个|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|
| 项目经理|员工姓名#2|第二章|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|
| | | | | | | | | | | |
| 项目经理|员工姓名#1|1个|项目#3|小行星5127|第二章|数量|弗吉尼亚州诺福克||二〇二二年三月七日|二○二四年九月二十日|
| 项目经理|员工姓名#2|第二章|项目#3|小行星5127|第二章|数量|弗吉尼亚州诺福克||二〇二二年三月七日|二○二四年九月二十日|
| | | | | | | | | | | |
| 项目经理|员工姓名#1|1个|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二〇二一年三月七日|二〇二三年四月十日|
| 团队负责人|员工姓名#3|三个|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二二年三月二十一日|2023年4月4日|
| 工程技术III|员工姓名#5|五个|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二二年三月二十一日|2023年4月4日|
| 工程技术III|工作人员姓名#13|十三|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二〇二三年二月六日|2023年4月4日|
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二三年一月三十一日|2023年4月4日|
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二三年一月三十一日|2023年4月4日|
结果表:
| 人工类别|总差距|存在差距的项目||||列(O)中的预期结果|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 行政助理|1个|进步之路多条进步之路POP:21年4月12日至23年4月4日||||1个用于进度道路多个进度道路POP:21年4月12日至23年4月4日|
| 电子技术员II|1个|进步之路多条进步之路POP:2023年2月6日至2023年4月4日||||1个用于进度道路多个进度道路POP:2023年2月6日至2023年4月4日|
| 工程技术III|七|项目#4 5702-左心耳,弗吉尼亚州诺福克POP:2021年4月12日-2023年4月4日项目#4 5702-弗吉尼亚州诺福克LAA POP:2023年1月31日-2023年4月4日项目#4 5702-弗吉尼亚州诺福克LAA POP:2023年2月6日至2023年4月4日||||项目#4 5702-LAA诺福克,VA POP所需4件:2021年4月12日--2023年4月4日2项目#4 5702-LAA诺福克,VA POP要求:2023年1月31日--2023年4月4日1项目#4 5702-LAA诺福克,VA POP要求:2023年2月6日至2023年4月4日|

| 机械|五个|项目#2 5120-LAA德克萨斯州达拉斯POP:2022年11月4日至2022年2月7日||||项目#2 5120-LAA德克萨斯州达拉斯POP所需5件:2022年11月4日至2022年2月7日|
编辑以下内容@JvdV解决方案:
如果范围中没有空行,则@JvdV提供的公式有效。

=LET(a,A2:K25,b,SORT(FILTER(a,(INDEX(a,,2)="TBD")+(INDEX(a,,2)="")),10),c,UNIQUE(TAKE(b,,1)),IF(ISERROR(TAKE(c,1)),"",REDUCE({"Labor Category","Total Gaps","Projects with Gaps"},c,LAMBDA(d,e,LET(f,FILTER(b,TAKE(b,,1)=e),VSTACK(d,HSTACK(e,ROWS(f),TEXTJOIN(CHAR(10),,BYROW(UNIQUE(f),LAMBDA(g,TEXTJOIN(" ",,SUM(N(MMULT(N(f=g),SEQUENCE(COLUMNS(f),,,0))=COLUMNS(g)))," Required for",TEXT(CHOOSECOLS(g,4,5,8,10,11),{"","","@ POP:","mm/dd/yyyy","-- mm/dd/yyyy"}))))))))))))

正如我在评论中提到的,原始数据工作表使用NULL/BLANK行来分隔项目,由于这是一个共享工作簿,我没有能力更改它。虽然已经努力强制执行数据验证,但我的同事会找到创造性的方法来打破结果。因此,我必须找到一个解决方案来解决这个问题。
删除示例数据中的空行后,我做了一些进一步的"测试",结果如下:
1.如果列(A)为空/空白,则公式在M2处返回#VALUE。这可以通过对空白单元格返回"TBD"来"即时"解决,而不更改源数据?
1.如果列(B)为空值/空白,并且列(O)中的结果将具有多个值,则公式将在(O #)处返回#VALUE。当(O #)结果是单个条目时,没有错误。同样,通过为空白单元格返回"TBD"而不更改源数据,是否可以"即时"解决此问题?
1.如果列(J)或(K)为空/空白或不是日期,结果在列中(O)将具有多个值,则公式将返回(O #)。在相同条件下,如果(O #)结果是单个条目,结果显示为0或文本,空值/空白(即TBD)。在这种错误情况下,TBD适用于单个条目,但对于多个条目无效,因此似乎不是一个"容易"的修复方法。
我相信解决1、2和3将消除数据集中空行的问题。详细查看实际工作簿中的原始数据,这些"问题"有许多示例,但在数据的上下文中它们存在的原因是有意义的,我必须找到一个解决方案,说明这些问题并仍然有效。
其他故障排除:使用此数据集(注意空行和单元格),结果与使用所示公式的预期结果一致。除非存在问题2和3(上文)的条件,否则实际数据集也是如此:

=LET(a,rngGapAwarded,b,SORT(FILTER(a,((INDEX(a,,1)<>"")*((INDEX(a,,2)="TBD")+(INDEX(a,,2)="")))),1),c,UNIQUE(TAKE(b,,1)),IF(ISERROR(TAKE(c,1)),"",REDUCE({"Labor Category","Total Gaps","Projects with Gaps"},c,LAMBDA(d,e,LET(f,SORT(FILTER(b,TAKE(b,,1)=e),10),VSTACK(d,HSTACK(e,ROWS(f),TEXTJOIN(CHAR(10),,BYROW(UNIQUE(f),LAMBDA(g,TEXTJOIN(" ",,SUM(N(MMULT(N(f=g),SEQUENCE(COLUMNS(f),,,0))=COLUMNS(g)))," Required for",TEXT(CHOOSECOLS(g,4,5,8,10,11),{"","","@ POP:","mm/dd/yyyy","-- mm/dd/yyyy"}))))))))))))

| 线性加速器|雇员|员工ID编号|项目描述|任务|分部|差旅(是/否)|位置|SY|POP开始|POP结束||分析结果|||
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 项目经理|员工姓名#1|1个|进步路|多个|第二章|数量|进步路||二○二二年三月二十一日|2023年4月4日||人工类别|总差距|存在差距的项目|
| 行政助理|待定|不可用|进步路|多个|第二章|数量|进步路||二○二一年四月十二日|2023年4月4日||行政助理|1个|1个用于进度道路多个进度道路POP:2021年4月12日至2023年4月4日|
| 电子技术员II|待定|不可用|进步路|多个|第二章|数量|进步路||二〇二三年二月六日|2023年4月4日||电子技术员II|1个|1个用于进度道路多个进度道路POP:2023年2月6日至2023年4月4日|
| 二级电工|员工姓名#4|四个|进步路|多个|第二章|数量|进步路||二○二一年四月十二日|2023年4月4日||工程技术III|七|项目#4 5702-LAA诺福克,VA POP需要3个:2021年4月12日-2023年4月4日2项目#4 5702-LAA诺福克,VA POP所需:2023年1月31日-2023年4月4日2项目#4 5702-LAA Norfolk,VA POP要求:2023年2月6日至2023年4月4日|
| 项目经理|员工姓名#1|1个|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日||技工|五个|项目#2 5120-LAA德克萨斯州达拉斯POP需要1个:2022年2月11日-2022年7月2日3项目#2 5120-LAA达拉斯,德克萨斯州POP要求:2022年4月11日-2022年7月2日1项目#2所需5120-LAA德克萨斯州达拉斯POP:待定-1900年1月0日|
| 项目经理|员工姓名#2|第二章|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|||||
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|||||
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|||||
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年四月十一日|2022年7月2日|||||
| 技工|待定|不可用|项目2|小行星5120|第二章|是|德克萨斯州达拉斯||二〇二二年二月十一日|2022年7月2日|||||
| 技工|||项目2|小行星5120|第二章|是|德克萨斯州达拉斯||待定||||||
| | | | | | | | | | | | | | | |
| 项目经理|员工姓名#1|1个|项目#3|小行星5127|第二章|数量|弗吉尼亚州诺福克||二〇二二年三月七日|二○二四年九月二十日|||||
| 项目经理|员工姓名#2|第二章|项目#3|小行星5127|第二章|数量|弗吉尼亚州诺福克||二〇二二年三月七日|二○二四年九月二十日|||||
| 项目经理|员工姓名#1|1个|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二〇二一年三月七日|二〇二三年四月十日|||||

| 团队负责人|员工姓名#3|三个|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二二年三月二十一日|2023年4月4日|||||
| 工程技术III|员工姓名#5|五个|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二二年三月二十一日|2023年4月4日|||||
| 工程技术III|工作人员姓名#13|十三|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|||||
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二〇二三年二月六日|2023年4月4日|||||
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二〇二三年二月六日|2023年4月4日|||||
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|||||
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二三年一月三十一日|2023年4月4日|||||
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|||||
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二一年四月十二日|2023年4月4日|||||
| 工程技术III|待定|不可用|项目4|小行星5702|第二章|数量|弗吉尼亚州诺福克||二○二三年一月三十一日|2023年4月4日|||||
使用该样本数据集,如果B20为"",则仅在O5中接收到#VALUE ERROR;结果表的其余部分可以工作。此外,当O中有多个结果要报告时,如果D、E、H、J或K列单元格为空或不匹配,则O中会收到#VALUE错误。我通过随机删除/更改值来测试此错误。我认为问题出在MMULTI函数中,但我不熟悉此函数,无法进一步排除故障......

kwvwclae

kwvwclae1#

我真的不知道该按哪个列排序,也不知道哪个列属于哪个命名范围,但我尽我所能尝试了以下方法,试图找出你想要实现的目标:

M2中的公式:

=LET(a,A2:K25,b,SORT(FILTER(a,(INDEX(a,,2)="TBD")+(INDEX(a,,8)="")),10),c,UNIQUE(TAKE(b,,1)),IF(ISERROR(TAKE(c,1)),"",REDUCE({"Labor Category","Total Gaps","Projects with Gaps"},c,LAMBDA(d,e,LET(f,FILTER(b,TAKE(b,,1)=e),VSTACK(d,HSTACK(e,ROWS(f),TEXTJOIN(CHAR(10),,BYROW(UNIQUE(f),LAMBDA(g,TEXTJOIN(" ",,SUM(N(MMULT(N(f=g),SEQUENCE(COLUMNS(f),,,0))=COLUMNS(g)))," Required for",TEXT(CHOOSECOLS(g,4,5,8,10,11),{"","","@:","mm/dd/yyyy","-- mm/dd/yyyy"}))))))))))))

相关问题