1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何找到报价最低的供应商

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-13 09:33 | 显示全部楼层
  1. =REDUCE({"物料代码","物料名称","仓库"},UNIQUE(B2:B18),LAMBDA(x,y,LET(a,SORT(HSTACK(B2:C18,A2:A18,H2:H18),4,1),VSTACK(x,XLOOKUP(y,CHOOSECOLS(a,1),DROP(a,,-1))))))
复制代码


1726191700031.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-13 09:34 | 显示全部楼层
本帖最后由 wp231957 于 2024-9-13 09:42 编辑
autumnalRain 发表于 2024-9-13 09:22
能否将包含公式的文件上传,我这边看不太懂,太复杂了,不会改

公式 你需要吃透了,否则以后 但凡有变动 你都不会修改的
=CHOOSECOLS(DROP(REDUCE("",UNIQUE(B2:B18),LAMBDA(x,y,VSTACK(x,TAKE(SORT(FILTER(A2:H18,B2:B18=y),8),1)))),1),2,3,8,1)
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-13 09:37 | 显示全部楼层
  1. =LOOKUP(,0/FREQUENCY(0,IF((B$2:B$18=B24)*(C$2:C$18=C24),G$2:G$18,9^9)),A$2:A$18)
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-13 09:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
autumnalRain 发表于 2024-9-13 09:22
能否将包含公式的文件上传,我这边看不太懂,太复杂了,不会改

~~~~~              

如何得到报价最低的供应商.rar

10.29 KB, 下载次数: 5

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-13 09:51 | 显示全部楼层
richardzhu15 发表于 2024-9-13 09:28
不用filter
=XLOOKUP(B26&MINIFS($G$2:$G$18,$B$2:$B$18,B26),$B$2:$B$18&$G$2:$G$18,$A$2:$A$18)

这里用FILTER的原因是:
如果低价金额一样,存在多个供应商时,FILTER可以全部列出,XLOOKUP只能找到排第1位或最后1位的,其它供应商会漏掉




TA的精华主题

TA的得分主题

发表于 2024-9-13 10:09 | 显示全部楼层
Python+Pandas:
import pandas as pd

df = pd.read_excel('Sample432.xlsx', nrows=17)
print(df.groupby('物料代码', group_keys=False).apply(lambda x: df.iloc[x['报价'].idxmin(), [2, 0]]))
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-13 10:24 | 显示全部楼层
学习一下字典,打扰了
Sub test()
arr = [a1].CurrentRegion
Set d = CreateObject("scripting.dictionary")
For i = 2 To UBound(arr)
   If Not d.exists(arr(i, 2)) Then
      d(arr(i, 2)) = i
   Else
      r = d(arr(i, 2))
      If arr(i, 7) < arr(r, 7) Then
         d(arr(i, 2)) = i
      End If
   End If
Next
ReDim brr(1 To d.Count, 1 To 3)
For Each kk In d.keys
   m = m + 1
   brr(m, 1) = arr(d(kk), 2)
   brr(m, 2) = arr(d(kk), 3)
   brr(m, 3) = arr(d(kk), 1)
Next
[b30].Resize(, 3) = Array("物料代码", "物料名称", "仓库")
[b30].CurrentRegion.Offset(1).ClearContents
[b31].Resize(m, 3) = brr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-14 07:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-14 08:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wp231957 发表于 2024-9-13 09:34
公式 你需要吃透了,否则以后 但凡有变动 你都不会修改的
=CHOOSECOLS(DROP(REDUCE("",UNIQUE(B2:B18),L ...

大神,我想问问LAMBDA函数的X/Y你假设的是什么啊,我想学这个函数可看你们的公式实在是没弄明白X/Y,能交交我不

TA的精华主题

TA的得分主题

发表于 2024-9-14 08:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
俊宇19856704 发表于 2024-9-14 08:41
大神,我想问问LAMBDA函数的X/Y你假设的是什么啊,我想学这个函数可看你们的公式实在是没弄明白X/Y,能交 ...

x 就是reduce的第一参数
y 就是reduce的第二参数
同时 x 也是我们最终想要的东东

评分

1

查看全部评分

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

本版积分规则

1234

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

GMT+8, 2025-2-13 15:28 , Processed in 0.029805 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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