fflag = i_ Vart
fflagl = 2
Exit For
End If
End If Next i_ Vart End If
lfFJg = ООг fflagI = 2 Тhen
Exit For
End If
Next i_tstМestor
End If
EndIf
запись нового результата для данного объема финансирования
IfFlg = 1 Тhen
Flg=O
nn_Fact_INV = nn_Fact_INV + 1
Записываем используемые ранее имена при получении макс на этом объеме
ReDim Preserve FMAX4(nn]act_INV)
ReDim Preseгve FMAX4(nn _Fact_INV).FNameMestor(nn _Fact_ INV) FMAX4(nn]act_INV).FMAX = Tst_MAX
FMAX4(nn]act_INV).FDob = FMAXl(i_Fact_INV).FDob
FMAX4(nn ]act_ INV).Flnv = FMAXl (i]act_ INV).Flnv
FMAX4(nn]act_INV).NmМestor = FMAXl (i]act_INV).FNameMestor
FMAX4(nn_Fact_INV).F _i_INV = i_INV 'Обшиеобъемывложения FMAX4(nn_Fact_INV).FNameDAO = FMAX1(i_Fact_INV).FNameDAO
FMAX4(nn ]act_ INV).FNameMestor(nn ]act_ INV) = FMAXl (i_Fact_ INV).FNameMestor
Ifj_in_iINV <> i_INV Тhen
For ii_INV = 1 То nn]act_INV
IfFMAX4(ii_INV).F _i_INV = i_INV - FMAXl(i]act_INV).F _i_INV Тhen
For i_ Vart = 1 То UBound(FMAX4(ii_INV).FNameMestor) FMAX4(nn]act_INV).FNameMestor(i_ Vart) = FMAX4(ii_INV).FNameMestor(i_ Vart)
If fflagl = 2 Then 'Исключаемдвойноеинвестированиевместорождение, давшеемаксимум IfFMAX4(ii_INV).FNameMestor(i_ Vart) = FMAXl(i]act_INV).FNameMestor Тhеп FMAX4(nn_Fact_INV).FNameMestor(fflag) = ""
fflagl = О
End If
End If
Next i Vart
End If
Nextii_INV
FMAX4(nn ]act_INV).FNameMestor(nn]act_ INV) = FMAX] (i]act_ INV).FNameMestor
End If
Мах_Мах = Tst_MAX
FMAX2(i_INV) = Мах_Мах
Flg=O
End If
Next j_in _iINV
Nexti_INV
Обработка результатов
Dim OиtRezO As Мах2
Выдача результатов
SubResи1t_oиt(FMAX]О, FMAX40)
End Sиb
Sиb Resиlt_oиt(FМAXIO As Мах], FMAX40 As Мах2)
DimSheetAsWorksheet 'Переменная для текущих листов
Dim ListNameO As String
Dim arrayindex, nSheets, Add_n_Sheet, OиtSheet As Integer
Для каждой новой номенклатуры создается свой лист результатов
Начальные значения
arrayindex = ] 'Определяет номер имени в массиве имен
nSheets = О
Add_n_Sheet = О
OutSheet = 3 'Необходимоечислолистов
ReDim ListName(OutSheet)
ListName(l) = "Оптимизация добычи нефти"
ListName(2) = "Для заметок 1"
ListNamе(З) = "Для заметок 2"
ListName(4) = "Максимизация"
Формирование имени книги результатов
ResиltBook = Time &" "& Date &" "&" Результаты оптимизации "
Выдаем иформацшо в строке состояния
Application.StatusBar = "Создаю книry результатов: "& ResultВook
Создаем новую книry
Запрещаем переход на новое окно
Application.ScreenUpdating = False
Workbooks.Add
Вписываем данные в свойства файла
With ActiveWorkbook
Title = ResиltBook
Sиbject = "Оптимизациядобычинефти"
End With
Замена двоеточий и точек в дате на подчеркивания
ResиltВook = Replace(ResиltВook, ":", "_")
ResиltBook = Rep]ace(Resи1tBook, ".", "_")
Сохранение файла для изменения имени в текущем каталоге
ActiveWorkbook.SaveAs (ResиltBook)
Число листов в открытой книге
nSheets = 3
Добавляем листы
Add_n_Sheet = OиtSheet - nSheets
If Add_n_Sheet > ОТhеп
Worksheets.Add Coиnt:=Add_n_Sheet
End If
Переименовываемлисты
For Eacl1 Sheet In ActiveWorkbook. Worksheets
If IПStr(l, Sheet.Name, "Лист") Тhеп
Sheet.Name = ListName(arrayindex) arrayindex = arrayindex + 1
EndIf
NextSheet
Разрешаем обновление экрана
Application.ScreenUpdating = Тгие
Запоминаем имя созданной книги результатов
Resu1tBook = ActiveWorkbook.Name 'Активизируем книгу с программой
Тhis Workbook.Activate
Выдаем результаты по листам
For Each Sheet In ActiveWorkbook.Worksheets Select Case Sheet.Name
Case ListName(l) Sheet.Activate СаН Text1lnput
СаН Tabll_Write(FMAX10, FMAX40)
'Case ListName(2)
'Sheet.Activate
'Сall Text2Input
'СаН Tabl2 _ Write(Optimum_ Sk1adO, Optimum ]otrebitel())
'Case ListName(4)
'Sheet.Activate 'СаН Text4Input
'СаН Tabl4_ Write(Optimum]owerFactoгyO)
'ase ListNаmе(З)
'Sheet.Activate
'СаНТехtЗlnрut
End Select
Next Sheet
ActiveWorkbook.Save 'Сохранениерабочейкниги
'ActiveWorkbook.Close 'Закрытиекниги
'Wогkshееts(ListNаmе(З )).Activate
'Очищаем StatusBar
Application.StatusBar = False
End Sub
Sub Text1Input()
Dim s, sl As String
Dim Flag As Integer
s= A1"
sl = "L1"
Range(s, sl).Select
With Selection
.HorizontalAlignment = xlCenter
.VeгticalAlignment = xlCenter
.WrapText = False
.Orientation = О
.Addlndent = False
.ShrinkToFit = True
.MergeCeHs = True
End With
With ActiveWorkbook.ActiveSheet
.Range(s, s 1 ).Font.Size = 16
.Range(s, sl).Font.Bold = True
.Range(s, sl).Font.Name = "Times New Roman"
End With
s= "А2"
sl = "L2"
Range(s, s 1 ).SeIect
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = О
.Addlndent = False
.shrinkToFit = True
End With
With ActiveWorkbook.ActiveSheet
.Range(s, sl).Font.Size = 12
.Range(s, s 1 ).Fопt.воld = True
.Range(s, sl).Font.Name = "Times New Roman"
End With
Range("Al :Gl ").Select
ActiveCell.FormulaRICl = "Результатыоптмизации "
Range(" А2:А2 ").Select
ActiveCell.FormulaRICl = "Вложения"
Range("A2").Se1ect
Columns(" A:A").EntireColumn .AutoFit
Range("B2:B2").Select
ActiveCell.FormulaRICl = "МАХдобычи"
Range("B2").Select
Columns("B:B ").Entil'eColumn.AutoFi t
Range("C2 :С2 "). Select
ActiveCell.FormulaRICl = "Затратынаединицу"
Range("C2").Select
Columns("C :C").EntireColumn .AutoFi t
Range("D2:D2").Select ActiveCell.FormulaRICl = "Месторождения"
Range("D2").Select Columns("D:D").EntireColumn.AutoFit
Range("E2:E2").Select ActiveCell.FormulaRl Сl = "Инвестиции"
Range("E2").Select Columns("E:E").EntireColumn.AutoFit
Range("F2 :F2 ").Select ActiveCell.FormulaRlCl = "Добыча"
Range("F2").Select
Со lumns("F: F").EntireColumn .AutoFit
Range("G2:G2").Select
ActiveCell.FormulaRlCl = "Затратынаединицу"
Range("G2").Select
Columns("G:G").EntireCo lиmп .AutoFit
Rапgе("Н2:Н2 "). Select
ActiveCell.FormulaRICl =" ДАО
Rапgе("Н2 ").Select
Columns("H:H").EntireColumn.AutoFi t
Range("12: 12"). Select
ActiveCell.FormulaRICl =" ДАО
Range("I2").Select
Columns("I:I").EntireColumn.AutoFit
Range("J2:J2"). Select ActiveCell.FormulaRICl = "Инвестиции"
Range("J2").Select
Columns(" J :J").EntireColumn .AutoFit
Rапgе("К2:К2 "). Select
ActiveCell.FormulaRICl = "Добыча"
Rапgе("К2"),Sеlесt Columns("K:K").EntireColumn .AutoFi t
Range("L2: L2 ").Select
ActiveCell.FormulaRlCl = "Затратынаединицу"
Range("L2").Select Columns("L:L").EntireColumn.AutoFit
End Sub
Sub Tabll_ Write(FMAXI0 As Махl, FMAX40 As Мах2)
Dim i, ii,j,jj, Flag As Integer
Dim RowIndex, Strlndex, Columnlndex As Integer Dim Sredstva As Double
Dim DAOI0 As DAO_dob Dim DA020 As DAO_dob
RowIndex = 2
Рог i = LBound(FMAX4) То UBound(FMAX4)
. = 1 'Нач. знач. количества имен ДАО
ReDimDAOl(jj)
ReDimDA02(jj)
Sredstva = о 'Начальное значение фактического финансирования
Columnlndex = 1 'Выход на начало новой старки
Rowlndex = Rowlndex + 1 'Переход на следующую строку
Strlndex = Rowlndex 'Индекс строки вывода группы данных по варианту инвестирования
'Cel1s(RowIndex, Coltlmnlndex).Value = _
, FMAX4(i).F _UNV * 100 'Вывод примерного объема инвестирования
Columnlndex = ColUlrnlndex + 1 'Переход на следущий столбецв строке
Cel1s(Rowlndex, Coltlmnlndex).Value = _
FMAX4(i).FMAX 'Вывод максимальной добычи
Columnlndex = СоlUПl1lпdех + 1 'Переход на следущий столбец в строке
'Выдача всех месторождений и ДАО соответствующих данному mтимальному варианту
For j = LBound(FMAX4(i).FNameMestor) То UBound(FMAX4(i).FNameMestor)
lfFMAX4(i).FNameMestor(j) <> ""
Тhеп Columnlndex = Columnlndex + 1 '
Cel1s(Rowlndex, ColumnIndex).Value = FMAX4(j).NmМestor 'имяместорождения
Columnlndex = Columnlndex + l' Переход на следущий столбец в строке
Cells(Rowlndex, ColumnIndex).Value = FMAX4(j).Flnv 'фактическое финансирование месторождения
Sredstva = Sredstva + FМAX4(j).Flnv 'фактический объем финансирования
Columnlndex = Columnlndex + l' Переход на следущий столбец в строке
Cells(Rowlndex, ColumnIndex).Value = FMAX4(j).FDob 'добыча на месторождении
Columnlndex = Columnlndex + l' Стоимость на единицу добычи
Cells(RowIndex, Columnlndex).Value = FMAX4(j).FInv / FMAX4(j).FDob
Columnlndex = Columnlndex + l' Переход на следущий столбец в строке
Cells(Rowlndex, ColumnIndex).Value = FMAX4(j).FNameDAO 'имя DAO входящего в оптимальные
Ifjj = 1 Тhеп
DA01(jj).Name = FMAX4(j).FNameDAO
DAO 1 (jj).Invest = FMAX4(j).Flnv
DAOl(jj).Dob = FMAX4(j).FDob
End If
Flag= О
Ifjj> 1 Тhеп
Flag= 1
For ii = 1 То jj - 1
IfDAOl(ii).Name = FMAX4(j).FNameDAO Then
DAO 1 (ii).Invest = DAO 1 (ii).Invest + FMAX4(j).FInv
DAO1 (ii).Dob = DAOl(ii).Dob + FMAX4(j).FDob
Flag =0
End If
Next ii
End If
IfFlag = 1 Тhеп
ReDim DA02(jj)
For ii = 1 То jj - 1
DA02(ii) = DAOl(ii)
Next ii
ReDim DAOl(jj)
For ii = 1 То jj – 1
DAOl (ii) = DA02(ii)
Nextii
DAOl(jj).Name = FMAX4(j).FNameDAO
DAO 1 (jj).Invest = FMAX4(j).Flnv
DAOl(jj).Dob = FMAX4(j).FDob
jj=jj+l
End If
Ifjj = 1 Тhen
jj=jj+1
EndIf
'Формат дробной части вывода
Cells(Rowlndex, Colurnnlndex).NumberFormat = "0.00"
Co\umnIndex = 3 'Выход на начало новой сторки
Rowlndex = Rowlndex + 1 'Переход на следующую строку
End If
Nextj
Rowlndex = Rоwlпdех + 1 'Переход на следующую строку
Соlumпlпdех = I 'Выход на начало новой сторки
Cells(Strlndex, Co\urnnIndex).Va\ue = Sredstva 'фактические затраты
'Эффективность затрат
Cells(StrIndex, Co\urnnlndex + 2).Уаlие = Sredstva/ FMAX4(i).FMAX
Columnlndex = 9 'Выход на начало новой сторки
Cells(StrIndex, Co\umnlndex).Value = "ДАО"
Cells(StrIndex, Colurnnlndex + \).Value = "Инвестиции"
Cells(Strlndex, Colurnnlndex + 2).Value = "Добыча"
Cells(Strlndex, ColumnIndex + З).Vаluе = "Инвестиции/Добыча"
Fог ii = 1 То jj - 1
Cells(Strlndex + ii, Co\urnnlndex).Va\ue = DAO\(ii).Name
Cells(StrIndex + ii, Colurnnlndex + 1).Уаlие = DAO\(ii).Invest
Cells(Strlndex + ii, Columnlndex + 2).Уаlие = DAO\(ii).Dob
Cells(Strlndex + ii, ColurnnIndex + З).Vаluе = DA01(ii).Invest / DA01(ii).Dob
Nextii
Columnlndex = 1 'Выход на начало новой сторки
Next i
Colurnnlndex = 1 'Выход на начало новой сторки
Columns(2).EntireColumn.AutoFit 'Подстрой<а ширины столбца для текста
End Sub
'1)
Sub OpenDataFileO 'Открытие файла с данными
Dim Message, Filename As String
Dim Response As Integer 'Фиксацияответапользователя
Dim Book As Workbook 'Ссылканаобъект Workbook
NewOpen: 'Открытие нужного файла
Message = "Здравствуйте! Будете открывать файл с исходными данными?
" Response = MsgBox(Message, уЬУ esNo, "Оптимизация ")
IfResponse = vbYesThen
'Открытие окна диалога открытия файла
Application.Dialogs(xlDialog0pen ).Show
, Визуальнаяоценкафайла
Message = "Визуально оцените это тот файл, что вы хотели?
" Response = MsgBox(Message, vbYesNo, "Оптимизация ")
IfResponse = vbYes Тhеп
'Запоминание имени открытой книги
DataBook = ActiveWorkbook.Name
E\se
'Закрываем открытую книгу
ActiveWorkbook.C\oseSaveChanges:=False
GoTo NewOpen 'Переход на Открытие нужного файла
End If
E\se
Message = "Будете работать с открытой книгой Ехсеl с исходными данными? " Response = MsgBox(Message, vbOKCancel, "Оптимизация ")
IfResponse = уЬОК Тhen
'Проверка наличия этой книги среди открытых
Fог Each Book In Workbooks
IfBook.Name <> ТhisWorkbook.Name Тhen
Message = BookName &" Это тот файл, что вы хотели? "
Response = МsgВох(Меssаgе, vbYesNo, "Оптимизация ")
If Response = уЬУ es Then
, Визуальная оценка файла Book.Activate
Message = Book.Name & " Визуально оцените это тот файл, чтовы хотели? "
Response = MsgBox(Message, уЬУ esNo, "Оптимизация ")
If Response = уЬУ es Тhеп
'Запоминание имени открытой книги
DataBook = Book.Name
Exit For
End If
End If
End If
NextBook
If DataBook = '''' Тhеп
Message = "Файла нет среди открытых "_
&" или он Вам не подходит. Будете снова открывать файл?"
Response = MsgBox(Message, уЬ У esNo, "Оптимизация ")