我坐在这一个半星期,我只是错过了决定性的暗示。当然,如果解决方案太明显,就不需要用勺子喂我。我有两个变量 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,我期望有解决方案,但它的语言让我感到困惑。
上表显示了它最终应该是什么样子。下表是实际的,编程的。绿色部分被编程,白色单元格是常数,红色部分让我感到头疼。 我需要解决的实际等式是:
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