ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 通过三个条件搜索正确结果

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-10-6 19:14 | 显示全部楼层 |阅读模式
本帖最后由 jonyzhao 于 2024-10-8 18:49 编辑

搜索右侧单号与料号与左侧相同,将K栏的日期填入到D栏
如果相同的单号与料号有多次交货,则将交货数量大于5000,
交货日期最早的日期。

感谢各位老师,目前使用的EXCEL版本为2016版。



交货日期.png

查询日期.rar

7.35 KB, 下载次数: 24

TA的精华主题

TA的得分主题

发表于 2024-10-6 19:26 | 显示全部楼层
仅供 can  ka0   =IF(COUNTIFS(I:I,A2,J:J,B2)>1,LOOKUP(1,0/FREQUENCY(1%,($I$2:$I$17=A2)*(B2=$J$2:$J$17)*$L$2:$L$17*($K$2:$K$17>=5000)),$L$2:$L$17),LOOKUP(1,0/($I$2:$I$17=A2)/($I$2:$I$17=A2),$L$2:$L$17))

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-10-6 19:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
低版本写起来好费劲,还不知道行不行。
  1. =IFERROR(IF(COUNT(IF(((A2=I$2:I$17)*(B2=J$2:J$17)*(L$2:L$17))>0,1,""))=1,MAX((A2=I$2:I$17)*(B2=J$2:J$17)*(L$2:L$17)),MIN(IFERROR(1/(1/((A2=I$2:I$17)*(B2=J$2:J$17)*(K$2:K$17>=5000)*L$2:L$17)),"2035-12-31"))),"")
复制代码
微信图片_20241006195054.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-6 20:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼上的两位,经测试都可以显示正确结果。
看看是否还有简洁一些的公式。

TA的精华主题

TA的得分主题

发表于 2024-10-6 20:12 | 显示全部楼层
本帖最后由 edwin11891 于 2024-10-6 20:16 编辑

简单一点的,怕你的版本低了。
  1. =LET(t,FILTER(K$2:L$17,A2&B2=I$2:I$17&J$2:J$17),IFS(ISERR(ROWS(t)),"无",ROWS(t)=1,TAKE(t,-1,-1),1,MIN(IF(TAKE(t,,1)>=5000,TAKE(t,,-1)))))
复制代码

TA的精华主题

TA的得分主题

发表于 2024-10-6 21:37 | 显示全部楼层
公式再复杂一点,用割肉函数一步到位做出报表效果:
  1. =LET(t,GROUPBY(I2:J17,K2:K17,SUM,0,0),s,MAP(BYROW(CHOOSECOLS(t,{1,2}),CONCAT),LAMBDA(x,LET(a,FILTER(K2:L17,BYROW(I2:J17,CONCAT)=x),b,ROWS(a),c,IF(b=1,TAKE(a,,-1),MIN(FILTER(CHOOSECOLS(a,2),CHOOSECOLS(a,1)>=5000))),c))),VSTACK(I1:L1,HSTACK(t,s)))
复制代码
微信图片_20241006213616.png

TA的精华主题

TA的得分主题

发表于 2024-10-6 22:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=LET(a,SORT(FILTER($M$2:$N$17,($K$2:$K$17=A2)*($L$2:$L$17=B2)),2),IF(ROWS(a)>1,TAKE(FILTER(TAKE(a,,-1),TAKE(a,,1)>=5000),1,-1),TAKE(a,,-1)))

TA的精华主题

TA的得分主题

发表于 2024-10-7 15:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
=LET(a,FILTER($K$2:$L$17,$I$2:$I$17&$J$2:$J$17=A2&B2),IF(COUNTA(a)<3,TAKE(a,,-1),MIN(FILTER(TAKE(a,,-1),TAKE(a,,1)>=5000))))       写的不好,下拉

TA的精华主题

TA的得分主题

发表于 2024-10-7 17:14 | 显示全部楼层
=IF(COUNT(0/(A2&B2=I$2:I$17&J$2:J$17))=1,LOOKUP(A2&B2,I$2:I$17&J$2:J$17,L$2:L$17),MIN(IF((A2&B2=I$2:I$17&J$2:J$17)*(K$2:K$17>=5000),L$2:L$17)))
数组三键

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-7 19:05 | 显示全部楼层
yibao2 发表于 2024-10-7 17:14
=IF(COUNT(0/(A2&B2=I$2:I$17&J$2:J$17))=1,LOOKUP(A2&B2,I$2:I$17&J$2:J$17,L$2:L$17),MIN(IF((A2&B2=I$2: ...

到目前为止,你提供的公式是最简单的。

但有一个问题就是,当订单数量小于5000,又分两次交货时,搜索的日期是错误的,见附件的F6栏。
可不可以再加个条件,如果订单数小于5000,以最后一次的交货日期为需求的结果。
Image 2.png

查询日期.rar

8.63 KB, 下载次数: 4

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

本版积分规则

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

GMT+8, 2024-11-26 23:20 , Processed in 0.049538 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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