使Excel计算具有四个未知变量的等式

时间:2018-05-08 01:41:36

标签: excel excel-vba statistics combinatorics vba

我坐在这一个半星期,我只是错过了决定性的暗示。当然,如果解决方案太明显,就不需要用勺子喂我。我有两个变量 A B ,我知道每个变量( A:工人数量,B:工厂数量)。 C 可以快速计算, A / B = C ,或每个工厂的工人平均值。在某一年中,我在四个不同规模的工厂类别中分配工人,我想将其投影到其他数据集上。

这让我有(A1 + A2 + A3 + A4)/(B1 + B2 + B3 + B4)= C A1 / B1 = C1 等等上。为了能够实现这一目标,我必须假设 C1 C4 保持不变( 77,206,663,1555 )或在一定的偏差范围内。这意味着 A1 = 77 * B1 等等,这使我只有四个未知变量而不是十二个。

此时我在Excel中设置了一个表格,只要我知道 B1 B4 (我只在这一年确实这样做),它就能完美运行。目标是让Excel根据几个参数找到它们,但是,我不知道如何将它们翻译成Excel。我玩过VBA,我期望有解决方案,但它的语言让我感到困惑。

上表显示了它最终应该是什么样子。下表是实际的,编程的。绿色部分被编程,白色单元格是常数,红色部分让我感到头疼。 The upper table shows how it should look like in the end. The lower table is the actual, programmed one. The green pieces are programmed, the white cells are constants, the red bits are what gives me headaches.我需要解决的实际等式是:

77 * B1 + 206 * B2 + 663 * B3 + 1555 * B4 = 98200如果B1 + B2 + B3 + B4 = 482 (当然我需要接受未接地的数字,因为变量必须是整数;变量不是Excel坐标)。我的论点是,只有一种可能的组合,如果不是,我想知道还有多少。

if-part是我想给Excel提供的参数之一。其他人是: B1> B2> B3> B4 ,如果有必要,(在Excel坐标中), F11 = 1 F13 = 1 。我特别绝望的任务是让它按照大于 -presumption行事。到目前为止,我可以稍微调整一下我从另一个线程复制的代码,但这只是一小步。

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim NewValue As Double
Dim ControlRange1 As Range
Dim Item As Range
Set ControlRange1 = Range("B12:E12")

If Not Intersect(ControlRange1, Target) Is Nothing Then
'The change occured in one of the cells we want to control

NewValue = (Range("F12").Value - Target.Value) / 4
For Each Item In ControlRange1
    If Not Item.Address = Target.Address Then ' Don't change the cell that was changed
        Item.Value = NewValue
    End If
Next
End If

Application.EnableEvents = True
Set ControlRange1 = Nothing
Set ControlRange2 = Nothing
Set Item = Nothing
End Sub

0 个答案:

没有答案