|
楼主 |
发表于 2023-5-10 15:55
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
将一些数据放在X最上端,随着循环逐渐提取使用,使用过的值就DROP掉。
如下图,A列是包含空单元格的学生信息,要求将D列的3名监考老师按顺序【循环】填充到空单元格中,比如A13单元格仍然需要填充【王翰林】老师。
上面截图中的公式是一个常规做法,本帖主要说下面的公式用法:
- =TAKE(REDUCE(TOCOL(D2:D4&J1:T1,,1),A1:A42,LAMBDA(x,y,IF(y=0,VSTACK(DROP(x,1),@x),VSTACK(x,y)))),-42)
复制代码
公式运算逻辑说明:
1)TOCOL(D2:D4&J1:T1,,1)实现将监考老师姓名重复若干次并转化为1列的目的,作为X的初始值。
2)在循环A列单元格区域时,如果y=0,也就是空单元格,就用@X提取X中的第一个值,也就是待分配的老师。然后将这个老师DROP掉,在下面堆积@X填充空单元格位置。这样完成以后,X最开头的就是下一个待分配的老师了。
3)如果y<>0,也就是单元格是学生姓名,直接VSTACK(x,y)堆积上即可。
4)循环完毕后,因为只有最后42行(原数据共42行,含标题)是需要的,上面的若干行是没有被分配的老师姓名,所以TAKE(reduce最终返回数组X,-42)即可。
|
评分
-
3
查看全部评分
-
|