如何从多个所有者的列表中创建具有一个所有者的产品列表?

如何从多个所有者的列表中创建具有一个所有者的产品列表?

我在 A2:A21 中有一个产品列表(A1:M1 是标题栏)。这些产品后面是 12 位可以维修这些产品的所有者(B2:M21)的姓名。但是……并非所有所有者都可以维修每件产品。这就是为什么会有空单元格。我想创建一个自动的第二张工作表,其中包含相同的产品列表,但现在只有一个所有者,从可用的所有者中选择。我还希望选择被平等分配。这样所有所有者都有相同数量的产品(或尽可能接近)。谢谢!

答案1

你描述的是一个简单的线性规划(或者整数规划) 问题。Excel 有一个名为 Solver 的插件,默认情况下处于禁用状态。您可以在 下启用它Excel Options > Add-Ins > Manage Excel Add-Ins (Go)。这会将求解器添加到功能区的数据选项卡下。

您的解决方案是使修理工总数最大化。您的约束条件是是否有人可以修理某种产品,并且每种产品至少需要一名修理工。

有关求解器工作原理的更多信息,你可以谷歌一下,但是本教程在我看来很好。

答案2

假设我们从以下开始:

在此处输入图片描述

以下宏首先将第一列复制到第二张表。然后,宏从第一个产品开始(手机)并扫描从列开始的列寻找“X”。找到“X”后,所有者将转到第二张表。

然后宏将向下移动到第二个产品(充电器)并重复扫描各个列。但现在它从列开始C而不是列...这是为了帮助均匀分配所有者。以下是宏:

Sub Owner()
    Dim s1 As Worksheet, s2 As Worksheet
    Dim i As Long, j As Long
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")
    s1.Range("A:A").Copy s2.Range("A1")
    j = 2
    For i = 2 To 21
loopit:
        If s1.Cells(i, j) = "X" Then
            s2.Cells(i, 2).Value = s1.Cells(1, j).Value
            j = j + 1
            If j = 14 Then j = 2
            GoTo exloopit
        Else
            j = j + 1
            If j = 14 Then j = 2
        End If
        GoTo loopit
exloopit:
    Next i
End Sub

以下是输出表的示例:

在此处输入图片描述

相关内容