Смекни!
smekni.com

Анализ и прогнозирование развития российского рынка газа (стр. 19 из 20)

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&bsol;umnIndex = 3 'Выход на начало новой сторки

Rowlndex = Rowlndex + 1 'Переход на следующую строку

End If

Nextj

Rowlndex = Rоwlпdех + 1 'Переход на следующую строку

Соlumпlпdех = I 'Выход на начало новой сторки

Cells(Strlndex, Co&bsol;urnnIndex).Va&bsol;ue = Sredstva 'фактические затраты

'Эффективность затрат

Cells(StrIndex, Co&bsol;urnnlndex + 2).Уаlие = Sredstva/ FMAX4(i).FMAX

Columnlndex = 9 'Выход на начало новой сторки

Cells(StrIndex, Co&bsol;umnlndex).Value = "ДАО"

Cells(StrIndex, Colurnnlndex + &bsol;).Value = "Инвестиции"

Cells(Strlndex, Colurnnlndex + 2).Value = "Добыча"

Cells(Strlndex, ColumnIndex + З).Vаluе = "Инвестиции/Добыча"

Fог ii = 1 То jj - 1

Cells(Strlndex + ii, Co&bsol;urnnlndex).Va&bsol;ue = DAO&bsol;(ii).Name

Cells(StrIndex + ii, Colurnnlndex + 1).Уаlие = DAO&bsol;(ii).Invest

Cells(Strlndex + ii, Columnlndex + 2).Уаlие = DAO&bsol;(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&bsol;se

'Закрываем открытую книгу

ActiveWorkbook.C&bsol;oseSaveChanges:=False

GoTo NewOpen 'Переход на Открытие нужного файла

End If

E&bsol;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, "Оптимизация ")