You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel公式开发:单项目限用一次的多列取值最大和及使用顺序查询

解决Excel中“每列选一个值、项目不重复”的最大总和问题

嘿,你之前尝试的分步找每列最大值的思路其实有个致命问题:很容易选到重复的项目,或者错过全局最优的组合(比如某个项目在A列是次大,但在B列是超大,组合起来总和反而更高)。这个问题本质是指派问题(Assignment Problem),属于线性规划的范畴,用Excel的「规划求解」工具就能完美解决,还能同时得到选中的项目顺序。

下面是具体操作步骤,假设你的数据是:

  • A1:A10:10个项目名称
  • B1:K10:每个项目对应的10列数值

一、准备辅助区域

  1. 建立决策矩阵:比如选中M1:V10这个10×10的区域,每个单元格代表「是否选择第i行的项目对应第j列的数值」(M列对应B列,V列对应K列),后续我们会让这里的单元格只能是0(不选)或1(选中)。
  2. 设置目标总和单元格:比如W1,输入公式:
    =SUMPRODUCT(B1:K10,M1:V10)
    
    这个公式会自动计算选中数值的总和。

二、启用并配置规划求解

  1. 如果你的Excel里找不到「规划求解」,先去「文件」→「选项」→「加载项」,找到「规划求解加载项」并启用它,之后就能在「数据」选项卡里看到它了。
  2. 打开规划求解,按以下配置:
    • 目标单元格:选W1,设置为「最大值」
    • 可变单元格:选中M1:V10(就是我们的决策矩阵)
    • 添加约束条件
      • 点击「添加」,设置M1:V10 「等于」「二进制」(这样每个单元格只能是0或1)
      • 再添加:每行的和≤1(保证每个项目最多用一次),比如选中M1:V1,设置=SUM(M1:V1) ≤1,然后把这个约束复制到A2:A10对应的所有行
      • 最后添加:每列的和=1(保证每列必须选一个值),比如选中M1:M10,设置=SUM(M1:M10)=1,复制到B到K对应的所有列
  3. 点击「求解」,Excel会自动计算出最优组合,决策矩阵里的「1」就代表选中的项目和对应列。

三、提取项目使用顺序

要得到每列对应的选中项目,只需要用INDEX+MATCH公式:

  • 比如B列对应的项目,输入:
    =INDEX(A:A,MATCH(1,M1:M10,0))
    
  • 把这个公式依次复制到C到K列对应的单元格,就能得到完整的项目使用顺序啦。

小贴士:如果你的项目数量和列数不一致(比如项目多于10个),只需要调整决策矩阵的大小,约束条件改成「每行和≤1」「每列和=1」就可以,逻辑是一样的。

内容的提问来源于stack exchange,提问作者Arkadeusz91

火山引擎 最新活动