Я сижу на этом в течение полутора недель, и я просто пропускаю решающий намек. Конечно, нет необходимости кормить меня ложкой, если решение слишком очевидно. У меня есть две переменные 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 - это один из параметров, которые я хотел бы передать в Excel. Другие:
B1> B2> B3> B4 и, если необходимо, (в координатах Excel), F11 = 1 и F13 = 1 . Я особенно отчаиваюсь из-за задачи заставить его вести себя в соответствии с большим, чем -презуменсом. До сих пор я мог очень немного адаптировать этот код, который я скопировал из другого потока, но это всего лишь маленький шаг.
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