Заставить Excel вычислить уравнение с четырьмя неизвестными переменными - PullRequest
0 голосов
/ 08 мая 2018

Я сижу на этом в течение полутора недель, и я просто пропускаю решающий намек. Конечно, нет необходимости кормить меня ложкой, если решение слишком очевидно. У меня есть две переменные 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 - это один из параметров, которые я хотел бы передать в 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
...