2015-11-28 3 views
0

Я создавал рецептуры вручную в excel. Процесс становится довольно трудоемким, если число переменных велико. Есть ли встроенная функция в Excel, которую я могу эффективно использовать для создания формулировки? Я попытался написать макрос для создания этой формулировки, но пока не успел. Я могу поделиться им, если потребуется.Смешанная целочисленная формулировка с использованием макрокомандских формул

Пример одного из таких ограничений является:

Cik - Cpk + Dipk - Tijk >= 0 

где
я = 1, 2, ..., 8
'р' не равно 'я' и имеет значение 1, 2, ..., 8
k = 1, 2, ..., 8
j = 64 значения, хранящиеся в A1: A64 (общие комбинации i и k = 8 * 8 = 64, например 11, 12 .. ..88)

Когда я создаю рецептуру вручную и с небольшим количеством excel drag cel л помощь, это выглядит как this-

C11-C21+D121-T171>=0 (7 is stored in cell A1) 
C11-C31+D131-T171>=0 
. 
. 
C11-C81+D141-T171>=0 
C21-C11+D211-T231>=0 
C21-C31+D231-T231>=0 
. 
. 
C21-C81+D241-T231>=0 
. 
. 
. 
. 
C12-C22+D122-T152>=0 
C12-C32+D132-T152>=0 
. 
. 
. 

C88-C78+D878-T838>=0 etc. 
+0

Я не понимаю, как 171 является первым индексом (индексом) для T. – shg

ответ

0

Это невозможно сказать, из вашего вопроса, что вы хотите сделать с этими формулами, но чтобы ты следующее даст вам список всех перестановок. Это не самый быстрый способ, но код должен быть достаточно очевиден, чтобы вы могли приспосабливаться по мере необходимости.

Это приведет их к Sheet1, поэтому убедитесь, что вы сохранили что-либо на этом листе перед запуском или запустите его в новой книге. Раскомментируйте строку формулы, если вы действительно хотите, чтобы ссылки на ячейки, но я не отключил автоматический расчет, поэтому потребуется больше времени для запуска.

Dim i As Integer 
Dim k As Integer 
Dim p As Integer 
Dim ik As Integer 
Dim pk As Integer 
Dim ipk As Integer 
Dim ji As Integer 
Dim jk As Integer 
Dim ijk As Integer 
Dim r As Long 
Dim formulaText As String 

r = 0 
For i = 1 To 8 
    For p = 1 To 8 
     If p <> i Then 
      For k = 1 To 8 
       ik = i * 10 + k 
       pk = p * 10 + k 
       ipk = i * 100 + pk 
       For ji = 1 To 8 
        For jk = 1 To 8 
         r = r + 1 
         ijk = i * 100 + ji * 10 + jk 
         formulaText = "C" & CStr(ik) & "-C" & CStr(pk) & "+D" & CStr(ipk) & "-T" & CStr(ijk) 
         Sheet1.Cells(r, 1).Value = formulaText 
         'Sheet1.Cells(r, 2).Formula = "=" & formulaText 
        Next 
       Next 
      Next 
     End If 
    Next 
Next 
Смежные вопросы