ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: shaowu459

[分享] Microsoft 365:X檔案大揭秘

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-7 22:28 | 显示全部楼层
本帖已被收录到知识树中,索引项:LAMBDA
shaowu459 发表于 2023-4-16 21:29
LAMBDA(x,y,IF(条件判断,VSTACK(DROP(X,-1),基于X的最后一行生成的新数组),VSTACK(X,基于y生成的新数组)) ...

这就是局部分组呀,666

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-7 22:51 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
@刘卓 发表于 2023-5-7 22:11
这种的还真没用过,真厉害。
vstack(循环产生的数组[hstack(要继续判断的值放开头,第二个值,其他值)], ...

这是为了某些时候方便后续判断提取值的一个方法,偶尔用堆积多了,再提取需要的行数,一般是负若干行,或者筛选

TA的精华主题

TA的得分主题

发表于 2023-5-8 19:35 | 显示全部楼层
shaowu459 发表于 2023-4-16 22:22
=REDUCE(初始值,A1:A20,LAMBDA(x,y,LET(s,@TAKE(x,-1),t,s=y,VSTACK(DROP(x,-t),IF(t,数组1,数组2)))))

...

还能清除0行

TA的精华主题

TA的得分主题

发表于 2023-5-8 21:02 | 显示全部楼层
shaowu459 发表于 2023-4-16 23:00
在循环过程中,更新X中的某个值。

例如,以下公式根据B3:C9单元格区域判断姓名出现的次数(请忽略此例子 ...

用if数组判断更新值,差点没看懂

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-8 21:50 来自手机 | 显示全部楼层
@刘卓 发表于 2023-5-8 21:02
用if数组判断更新值,差点没看懂

这个确实没啥技巧就是更新x数组中已有数值的一个if方法而已

TA的精华主题

TA的得分主题

发表于 2023-5-9 00:10 | 显示全部楼层
shaowu459 发表于 2023-4-16 22:22
=REDUCE(初始值,A1:A20,LAMBDA(x,y,LET(s,@TAKE(x,-1),t,s=y,VSTACK(DROP(x,-t),IF(t,数组1,数组2)))))

...

这种写法,把if的2种形式统一成一样的格式,可以使公式简短,强强强,不过没有if好理解。

TA的精华主题

TA的得分主题

发表于 2023-5-9 01:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shaowu459 发表于 2023-4-16 23:24
X可以是一个随着循环持续增长或变化的单值,LAMBDA函数体每次运算时可以从X这个单值中提取部分数据来运算。 ...

多个字符且有重复字符的时候,算个数时还需要在处理一下细节

点评

嗯,根据实际数据特征灵活处理。这里主要介绍各种常见的挖掘x再利用的基础方法  发表于 2023-5-9 08:43

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-10 15:55 | 显示全部楼层
将一些数据放在X最上端,随着循环逐渐提取使用,使用过的值就DROP掉。

如下图,A列是包含空单元格的学生信息,要求将D列的3名监考老师按顺序【循环】填充到空单元格中,比如A13单元格仍然需要填充【王翰林】老师。
图片.jpg

上面截图中的公式是一个常规做法,本帖主要说下面的公式用法:
  1. =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)
复制代码
图片.jpg

公式运算逻辑说明:
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

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-10 16:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-5-10 18:04 | 显示全部楼层
shaowu459 发表于 2023-4-16 23:46
X在每次循环的时候不是必然每次增加一行,也可以一次性增加多行。

这个方法好,我是通过累加,找每次提取的位置,好长。还有最后iferror的处理学到了,比用if判断短。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-1 18:49 , Processed in 0.043959 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表