367 自动化表格助力工厂采购:快速锁定最佳采购成本方案(采购订单自动化)
在工厂的复杂供应链管理体系中,采购环节扮演着至关重要的角色,尤其在面对多元化物料需求与多变市场环境时,其工作难度与精细化要求显著提升。其中,针对不同物料向多家供应商询价的过程尤为关键。各类物料由于属性、规格、生产工艺等差异,其市场价格存在显著区别;同时,同一物料在不同供应商之间的报价亦可能存在显著差异,这既源于供应商成本结构、运营策略的个体化差异,也与市场竞争状况、供求关系等因素密切相关。
更为复杂的是,供应商报价通常并非固定不变,而是会根据采购数量进行动态调整。为适应工厂生产计划的多样性,供应商往往会设定不同数量层级的阶梯价格,如针对采购数量小于100件、小于500件、大于500件等不同区间提供差异化报价。这种精细化的价格策略,旨在通过量级优惠吸引大规模采购,同时也确保小规模订单的利润空间。
在完成这一系列多元化的询价后,采购部门面临的关键挑战在于:如何针对工厂所需的特定物料采购量,迅速且准确地从参与报价的供应商群体中(这些供应商可能包括一家、两家,乃至五至六家)筛选出对应采购数量下的最低报价供应商。
如下图所示的案件中,我们收集到的供应商信息分散在不同的工作页面上,涉及供应商1、供应商2等多家参与者。值得注意的是,尽管供应商众多且分布零散,但每个供应商所提供的报价单均遵循工厂所规定的统一格式。具体而言,B列清晰标明了供应商名称,C列记录了对应的物料代码,而D至F列则分别详述了针对采购数量小于100件、小于500件以及大于500件时的相应报价。
面对上述情况,当前的需求是设计一款智能化的自动化表格,该表格应能无缝嵌入工厂的采购订单报表系统中。其核心功能在于,只需一键操作,即可自动识别并精准匹配所采购物料在不同数量条件下的最低报价及其对应的供应商,从而极大地提升了采购决策的效率与准确性,确保工厂能够在纷繁复杂的报价数据中迅速锁定最具成本效益的采购方案。
效果如下图所示:
合并数据
为了更有效地进行报价查询,首要步骤是对分布在各个工作页面的供应商信息进行整合,将其统一归置于一个工作表中。鉴于所有供应商的报价单均遵循相同的格式——即各列标题与内容保持一致,仅因不同供应商提供的物料报价数量类别有所差异而导致行数有所不同——我们可以利用WPS中的“VSTACK”函数轻松实现数据合并。
操作时,只需事先在目标合并区域预设好足够容纳所有供应商数据的行数范围,然后在VSTACK函数的参数中正确引用各供应商数据源范围,即可顺利完成数据整合工作,为后续的报价查询奠定坚实基础。
录入以下函数:
=VSTACK(供应商01:供应商03!B2:F23)
公式含义:
此公式将供应商01、供应商02及供应商03工作表中B2至F23单元格范围内的所有数据垂直堆叠排列。
函数说明:
VSTACK:这是一个数组函数,用于将两个或多个数据区间按垂直方向(即列方向)合并成一个新的数组。
参数解析:
供应商01:供应商03!B2:F23:表示选取供应商01至供应商03这三个工作表中,从第2行开始至第23行结束,B至F列的全部单元格。此处使用冒号“:”作为间隔符号,用于一次性指定多个连续工作表的相同单元格范围。若需涵盖更多供应商,只需将首个与最后一个供应商的工作表名以同样方式用冒号相连,如“供应商01:供应商09!B2:F23”,即可实现对供应商01至供应商09工作表中相应单元格范围的数据合并。
效果如下图所示:
筛选结果
上述操作生成的结果可被视为一个“内存数据”集合,这一集合中的数据具有可移植性,能够作为参数被嵌套到其他相关函数中进行进一步的计算与分析。完成数据合并后,接下来的工作便是编制采购报表单。在此过程中,我们将依据实际采购的物料信息,从已整合的供应商报价数据集中筛选出与之对应的特定供应商报价。针对每一种物料,可能查找出一家或多家供应商的报价信息
录入以下函数:
=LET(A,VSTACK(供应商01:供应商03!B2:F23),FILTER(A,CHOOSECOLS(A,2)=C3))
公式含义:
首先,通过LET函数定义了一个名为A的变量。A的值由VSTACK函数生成,该函数将工作表“供应商01”,“供应商02”,和“供应商03”的B2:F23区域内的数据垂直堆叠在一起,从而整合了多个供应商的报价信息。
随后,对整合后的数据集A应用FILTER函数进行筛选。筛选条件设定为:当A的第2列(即合并后的供应商物料代码列)的值等于采购订单中指定物料代码单元格C3时,该行数据被视为满足条件并被保留。
综上所述,此公式实现了从多个供应商报价表格中提取出与采购订单中物料代码(位于C3单元格)相符的所有供应商报价记录,便于进一步比对和处理。
效果如下图所示:
数量判断
由于采购数量的多少直接影响到供应商的报价,而供应商通常会依据采购数量将其报价划分为三个标准区间:数量小于100件、介于100至500件之间以及大于500件。为此,我们需要在处理采购订单明细时,根据其中的数量值判断其所属的数量段。我们用数字1、2、3分别代表这三个数量段:1对应“小于100件”,2对应“100至500件”,3对应“大于500件”。
录入以函数:
=XLOOKUP(D3,{0;100;500},{1;2;3},,-1)
公式含义:
XLOOKUP函数在此处用于查找采购订单明细中单元格D3所记载的采购数量,将其与预先设定的边界值数组 {0, 100, 500} 进行比较。这些边界值定义了三个数量段的上下限。当D3中的数量落在某一区间内时,函数返回对应区间在结果数组 {1, 2, 3} 中对应的数字,即数量段编号。
参数 -1 表示进行升序查找且允许查询值小于查找范围内的最小值。在这种情况下,如果采购数量小于100件,函数将返回数值1;若采购数量在100至500件之间,则返回2;若采购数量超过500件,则返回3。通过这种方式,我们可以快速确定采购订单中每个物料的数量所属的数量段,以便后续进行相应的价格计算或分类统计。
效果如下图所示:
价位判断
在确定了采购物料对应数量所归属的数量段(用数字1、2、3表示)后,我们便能据此在已筛选出的各供应商对该物料的报价数据中,精准定位到相应的报价区间。这里,我们将筛选后的结果定义为变量B,将数量段数字返回结果定义为变量C。考虑到报价数据区域前两列分别为“供应商”与“物料代码”,我们在后续引用时需在其索引位置基础上增加2。供应商的位置在第1列,只需要在选择列函数中继续加上数字1即可。
基于以上逻辑,录入以下函数:
=LET(B,LET(A,VSTACK(供应商01:供应商03!B2:F23),FILTER(A,CHOOSECOLS(A,2)=C3)),C,XLOOKUP(D3,{0;100;500},{1;2;3},,-1),CHOOSECOLS(B,2 C,1))
公式含义如下:
首先,通过嵌套的LET函数定义变量:
B:内部LET函数中,先定义变量A,其值为使用VSTACK函数将工作表“供应商01”、“供应商02”和“供应商03”的B2:F23区域数据垂直堆叠合并。接着,利用FILTER函数筛选A,筛选条件为合并后的数据集中第2列(供应商物料代码列)与采购订单中物料代码单元格C3相等。最终,将筛选结果赋值给外部LET函数的变量B,即得到针对指定物料的各供应商报价数据。
C:使用XLOOKUP函数查找采购订单明细中单元格D3所记载的采购数量,将其与边界值数组 {0, 100, 500} 比较,以确定该数量所属的数量段(1、2或3),并将结果赋值给变量C。
最后,调用CHOOSECOLS函数,以变量B(筛选后的供应商报价数据)为数据源,选择从第(2 C)列开始的列。由于C代表数量段编号(1、2或3),加上2后即对应于报价数据中的“数量小于100件”、“100至500件”或“大于500件”报价列的索引位置。因此,此函数将返回指定物料在对应数量段下所有供应商的报价信息。其中数字1代表的是供应商列;
效果如下图所示:
最小判断
到这里就基本解决了不同供应商,不同数量范围的最小价判断了,只需要加入一个排序函数,对返回的阶进行升序排序,并对结果就第行即可;因为公式是需要向下填充的,所以需要注意锁定合并供应商报价的引用范围。录入以下函数:
=TAKE(SORT(LET(B,LET(A,VSTACK(供应商01:供应商03!$B$2:$F$23),FILTER(A,CHOOSECOLS(A,2)=C3)),C,XLOOKUP(D3,{0;100;500},{1;2;3},,-1),CHOOSECOLS(B,2 C,1))),1)
公式含义如下:
LET 函数内嵌套使用,依次定义变量 B 和 C,其含义与之前解释相同,此处不再赘述。
SORT 函数对由 CHOOSECOLS(B, 2 C, 1) 得到的、含有指定数量段报价及对应供应商名称的数据进行升序排序。排序依据为报价列(即第 (2 C) 列),供应商名称列(即第1列)随报价列一同参与排序。
TAKE 函数接收排序后的数据作为输入,取其第一行(索引值为1),即为指定物料在对应数量段下所有供应商报价中的最低报价及其供应商名称。
综上,此公式实现了对采购订单明细中每个物料,根据其采购数量所属数量段,在各供应商报价中快速找出最低报价及其供应商,并以单元格形式呈现。在向下填充时,公式中的合并供应商报价引用范围已锁定,确保了在处理不同订单明细时引用范围的稳定性。
效果如下图所示:
一键填充
上面已经完成公式“填充”版本的设计,基本上能够满足普通用户的设计需求了,但是对于一些完美用户需要实现真正意义的一键填充,也就是一个公式实现的话,还需要把公式更改为如下:
=REDUCE({"最低报价","供应商"},C3:C7,LAMBDA(X,Y,VSTACK(X,TAKE(SORT(LET(B,LET(A,VSTACK(供应商01:供应商03!B2:F23),FILTER(A,CHOOSECOLS(A,2)=Y)),C,XLOOKUP(OFFSET(Y,,1),{0;100;500},{1;2;3},,-1),CHOOSECOLS(B,2 C,1))),1))))
由于公式复杂,仅仅供有兴趣的人学习
此公式相对复杂,主要面向对此类高级函数有深入兴趣的学习者。下面简要阐述其基本逻辑:
REDUCE 函数:以数组 {"最低报价","供应商"} 作为初始值(起始累积器 X),对采购订单中的物料编码范围 C3:C7 进行迭代(每次迭代的元素为 Y)。在每次迭代过程中,将当前累积器 X 与由 LAMBDA 函数返回的结果通过 VSTACK 函数垂直堆叠,最终得到一个包含所有物料最低报价及供应商信息的二维数组。
LAMBDA 函数:定义了一个匿名函数,接受两个参数:当前累积器 X 和当前物料编码 Y。该函数返回一个包含最低报价和供应商名称的单行数组,具体计算过程与之前的单个公式相同,只是此处将原公式中的 C3 替换为 Y,并使用 OFFSET(Y, , 1) 获取当前物料编码所在行的采购数量。
VSTACK 函数:在 REDUCE 函数的迭代过程中,将当前累积器 X 与 LAMBDA 函数返回的结果(即单个物料的最低报价及供应商信息)进行垂直堆叠,逐步构建包含所有物料信息的最终结果数组。
通过上述改写,该公式实现了真正意义上的一键填充,无需手动向下复制公式即可自动查询并汇总采购订单中所有物料的最低报价及其供应商信息。整个计算过程充分利用了WPS的动态数组功能,提高了数据处理的效率与便捷性。
最后总结:
在工厂复杂的供应链管理体系中,采购环节对于成本控制与生产计划的顺利实施至关重要。面对多元化的物料需求、多变的市场环境以及供应商报价的动态变化,尤其是阶梯式价格策略,采购部门面临着高效筛选最低报价供应商的挑战。针对这一问题,我们设计了一款智能化的自动化表格,它巧妙集成于工厂采购订单报表系统中,只需一键操作,即可自动识别并精准匹配所采购物料在不同数量条件下的最低报价及其对应的供应商。
首先,通过WPS的“VSTACK”函数,我们将分散在多个工作页面的供应商报价信息统一整合到一个工作表中,确保数据的集中与标准化。随后,运用“FILTER”函数筛选出与采购订单中物料代码相符的供应商报价记录。为应对供应商报价的阶梯特性,我们利用“XLOOKUP”函数根据采购数量判断其所属数量区间,并将结果编码为数字标识。进一步,结合“CHOOSECOLS”函数,精准定位到对应数量区间的供应商报价。通过“SORT”和“TAKE”函数对筛选结果进行排序并取最低报价及其供应商,实现了单个物料的最优报价查询。
为了满足一键处理所有物料的需求,我们采用“REDUCE”函数,结合“LAMBDA”匿名函数,构建出一个高度集成的公式。该公式以采购订单中的物料编码范围为迭代对象,通过递归调用内部逻辑,自动为每个物料执行上述查询过程,并利用“VSTACK”函数将所有物料的最低报价及供应商信息垂直堆叠,生成一个完整的二维数组。这一设计不仅简化了操作流程,避免了人工填充公式的繁琐,而且充分发挥了WPS的动态数组功能,显著提升了采购决策的效率与准确性。
总之,这款智能化的自动化表格以简洁高效的方式解决了工厂采购环节中的复杂报价筛选难题,助力采购人员在海量数据中迅速锁定最具成本效益的采购方案,为优化供应链管理、降低成本、保障生产计划的顺利执行提供了有力的技术支持。通过这一案例,我们见证了现代办公软件的强大功能与灵活性,以及合理运用高级函数解决实际业务问题的巨大潜力。