ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 365最新版函数基本用法介绍(一楼更新视频下载链接)

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-30 08:31 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:LAMBDA
lws 发表于 2022-10-29 22:09
超版,这里应该是ROW(65:90),
第一参数写成A61:A65,=REDUCE(A61:A65,CHAR(ROW(65:90)),LAMBDA(x,y,SUB ...

第一参数可以是单值也可以是多行多列的数组,只要后面的运算支持,并且最终返回你想要的数组就行,很灵活。比如一参是四行两列,后面运算完了变成四行一列或者其他的,都可以,根据需要就行,很灵活。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-3 23:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
补贴金额计算:
  1. =TAKE(REDUCE({40,0},OFFSET(A3:B3,,24-COLUMN(A:K)*2),LAMBDA(x,y,x+MIN(@x,@+y)*IF({1,0},-1,y))),,-1)
复制代码
这个例子主要还是利用Reduce累加的功能,初始值是一个一行两列数组,第一个40是补贴总数量,第二个是0用来记录补贴金额。循环第一次的时候,例如数量是8,那么更新后的x就是{40-8,0+8*价格},以此类推。


图片.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-4 13:11 | 显示全部楼层
循环,获取各列所有元素的组合(前面好像发过?记不清了再发一次):
  1. =REDUCE(A1:A3,B1:D1,LAMBDA(x,y,TOCOL(x&"-"&TOROW(OFFSET(y,,,99),1))))
复制代码
图片.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-11-6 10:55 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-6 11:39 | 显示全部楼层
本帖最后由 shaowu459 于 2022-11-6 11:41 编辑
monkeyfirst123 发表于 2022-11-6 10:55
怎么加入你这个qq群啊?

我私信回复你吧。看了下,你只接受好友的私信,发不了。191楼你看看,留了群号。你自己加一下吧

TA的精华主题

TA的得分主题

发表于 2022-11-7 19:03 | 显示全部楼层
学习!!!!!!!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2022-11-9 19:53 | 显示全部楼层
shaowu459 发表于 2022-11-6 11:39
我私信回复你吧。看了下,你只接受好友的私信,发不了。191楼你看看,留了群号。你自己加一下吧

谢谢,已经申请了。我也不太懂怎么解除私信的限制

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-16 14:45 | 显示全部楼层
BOM式根据父级和子级展开(示例文件在1楼下载链接中),使用Lambda函数定义dx名称,递归调用(公式细节未优化):
  1. =LAMBDA(z,DROP(REDUCE(0,SEQUENCE(ROWS(z)),LAMBDA(x,y,LET(s,INDEX(z,y,),t,FILTER($B$2:$C$32,$A$2:$A$32=INDEX(s,2),0),IF(COUNTA(t)=1,VSTACK(x,s),VSTACK(x,s,dx(HSTACK(@s*TAKE(t,,-1)^0+1,t))))))),1))
复制代码

图片.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-16 14:47 | 显示全部楼层
根据BOM表计算产成品的组成价格(公式细节未作优化,文件下载链接在1楼):
  1. =LAMBDA(x,SUM(BYROW(FILTER($C$11:$F$27,$A$11:$A$27&$B$11:$B$27=CONCAT(x)),LAMBDA(y,INDEX(y,3)/INDEX(y,4)*IF(INDEX(y,2)=0,VLOOKUP(@y,$A$31:$B$40,2,),kx(TAKE(y,,2)))))))
复制代码
图片.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-16 14:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
装箱问题的2个方法。
第一种:每个产品按数量展开,按162个一行分开,然后统计每一行内的产品名称和数量(公式细节未做优化):
  1. =LET(s,WRAPCOLS(TOCOL(IF(B3:B9>=COLUMN(A:ZZ),A3:A9,\),3),162,0),REDUCE({"规格型号","箱号","数量"},SEQUENCE(,COLUMNS(s)),LAMBDA(x,y,LET(o,INDEX(s,,y),q,UNIQUE(o),p,FILTER(q,q>0),VSTACK(x,HSTACK(p,IF(p>0,y&"号箱"),MAP(p,LAMBDA(z,SUM(N(z=o))))))))))
复制代码
图片.jpg
第二种:每个产品按数量展开,然后逐个往箱子(x)里装,如果够了160个就加1个箱子,否则仍然放在原来的箱子里(公式里重复部分未作优化):
  1. =REDUCE(A16:D16,TOCOL(IF(B2:B7>=COLUMN(A:ZZ),A2:A7,\),3),LAMBDA(x,y,LET(s,TAKE(x,-1),IF(MOD(SUM(TAKE(x,,-1)),160)=0,VSTACK(x,HSTACK(y,VLOOKUP(y,A:B,2,),MAX(INDEX(x,,3))+1,1)),IF(y=@s,VSTACK(DROP(x,-1),IF({1,1,1,0},s,s+1)),VSTACK(x,HSTACK(y,VLOOKUP(y,A:B,2,),MAX(INDEX(x,,3)),1)))))))
复制代码

图片.jpg

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 11:42 , Processed in 0.048751 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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