Анализ эффективности вложений денежных средств в РКО
Then Exit Subi = i + 1
End If
End If
If Mag(3) < 0 Then
If Mag(1) < 0 Then
If MemoOrder(i; min(Mag(3); Mag(1)); SR970; S192; 0; _
"Отрицательная разница от продажи РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
If Mag(2) < 0 Then
If MemoOrder(i; min(Mag(3); Mag(2)); SR970; S904; 0; _
"Отрицательная разница от продажи РКО за " + CStr(CurDate)) Then Exit Sub
i = i + 1
End If
End If
If Format(Mag(4)) > 0 Then
If MemoOrder(i; Mag(4); S970; S904; 0; _
"Комиссия ВКБ в т.ч. НДС " + CStr(Format(Mag(4) / 6; "0,00"))) Then Exit Sub
End If
End Sub
'-------------------------------------------- Memo Order
Function MemoOrder(Num; sum As Double; n1; n2; Pos As Integer; Order As String)
Dim i As Integer
Dim Flag As Boolean
Dim Str; Str1 As String
Str1 = ""
Str = CStr(sum)
Str = Format(Str; "000000000000,00")
Flag = False
For i = 1 To Len(Str)
If Mid(Str; i; 1) = "," Then
If CInt(Right(Str; 2)) = 0 Then
Str1 = Str1 + "="
Exit For
Else
Str1 = Str1 + "-"
End If
Else
If Mid(Str; i; 1) <> "0" Then Flag = True
If Mid(Str; i; 1) <> "0" Or Flag Then Str1 = Str1 + Mid(Str; i; 1)
End If
Next i
Cells(3; 6) = Str1
If Pos > 0 Then
If n1 > 6 Then
Cells(5; 6) = Worksheets("Клиенты").Cells(2; n1)
Else
Cells(5; 6) = Worksheets("Клиенты").Cells(Pos; n1)
End If
If n2 > 6 Then
Cells(10; 6) = Worksheets("Клиенты").Cells(2; n2)
Else
Cells(10; 6) = Worksheets("Клиенты").Cells(Pos; n2)
End If
Else
Cells(5; 6) = n1
Cells(10; 6) = n2
End If
Cells(16; 1) = Order
Cells(1; 6) = Num
Range("A1:H24").Copy
Range("A32").Select
ActiveSheet.Paste
If DialogPrint("Ордер"; 2) Then
MemoOrder = True
Else
MemoOrder = False
End If
End Function
'-------------------------------- Печать биржевой информации -------
Sub PrintBirgaInfo()
Dim Sheet As Object
Dim Flag As Boolean
Dim i; n; k; Num As Long
Dim mas(3) As Double
Set Sheet = Worksheets("Биржа")
CurDate = Worksheets("Врем").Cells(1; 4)
Sheets("Биржевая Информация").Select
Cells(3; 10) = CurDate
For i = 1 To 3
mas(i) = 0
Next i
i = 2
n = 7
Range(Cells(n; 1); Cells(n + 100; 17)).Delete shift:=xlToLeft
Flag = True
Do While Sheet.Cells(i; 1) <> Empty
If Sheet.Cells(i; 1) = CurDate Then
Flag = False
Cells(n; 1) = Sheet.Cells(i; 2)
Cells(n; 7) = Sheet.Cells(i; 3)
Cells(n; 9) = Sheet.Cells(i; 4)
Cells(n; 10) = Sheet.Cells(i; 5)
Cells(n; 5).Font.Bold = True
Cells(n; 11) = Sheet.Cells(i; 6)
Cells(n; 11).Font.Bold = True
Cells(n; 12) = Sheet.Cells(i; 7)
Cells(n; 13) = Sheet.Cells(i; 8)
k = 2
While Worksheets("Бумаги").Cells(k; 1) <> Empty
If Worksheets("Бумаги").Cells(k; 1) = Cells(n; 1) Then
Cells(n; 2) = Worksheets("Бумаги").Cells(k; 2)
Cells(n; 3) = Worksheets("Бумаги").Cells(k; 3)
Cells(n; 6) = Worksheets("Бумаги").Cells(k; 4)
End If
k = k + 1
Wend
Cells(n; 2).NumberFormat = "ДД.ММ.ГГ"
Cells(n; 3).NumberFormat = "ДД.ММ.ГГ"
Cells(n; 6).NumberFormat = "# ##0"
Cells(n; 9).NumberFormat = "# ##0"
Range(Cells(n; 10); Cells(n; 17)).NumberFormat = "0,00"
Cells(n; 4) = Cells(3; 10) - Cells(n; 2)
Cells(n; 5) = Cells(n; 3) - Cells(3; 10)
Cells(n; 8) = Cells(n; 9) / Cells(n; 6) * 100
Cells(n; 8).NumberFormat = "0,00"
If Cells(n; 7) <> 0 And Cells(n; 5) <> 0 Then
Cells(n; 14) = (100 / Cells(n; 10) - 1) * 36500 / Cells(n; 5) * 0,85
Cells(n; 15) = (100 / Cells(n; 10) - 1) * 36500 / Cells(n; 5)
Cells(n; 16) = (100 / Cells(n; 11) - 1) * 36500 / Cells(n; 5) * 0,85
Cells(n; 16).Font.Bold = True
Cells(n; 17) = (100 / Cells(n; 11) - 1) * 36500 / Cells(n; 5)
mas(1) = mas(1) + Cells(n; 5) * Cells(n; 9) * Cells(n; 14)
mas(2) = mas(2) + Cells(n; 5) * Cells(n; 9) * Cells(n; 16)
mas(3) = mas(3) + Cells(n; 5) * Cells(n; 9)
End If
n = n + 1
End If
i = i + 1
Loop
If Flag Then
MsgBox "Биржевой информации нет"
Exit Sub
End If
Num = n
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlLeft).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlRight).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlTop).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).Borders(xlBottom).Weight = xlThin
Range(Cells(7; 1); Cells(Num - 1; 17)).BorderAround Weight:=xlMedium
Cells(Num; 1) = "Итого"
Cells(Num; 1).Font.Bold = True
Cells(Num; 1).HorizontalAlignment = xlCenter
Cells(Num; 14) = mas(1) / mas(3)
Cells(Num; 15) = mas(1) / mas(3) / 0,85
Cells(Num; 16) = mas(2) / mas(3)
Cells(Num; 16).Font.Bold = True
Cells(Num; 17) = mas(2) / mas(3) / 0,85
Range(Cells(Num; 14); Cells(Num; 17)).NumberFormat = "0,00"
For i = 1 To 3
mas(i) = 0
Next i
For i = 7 To Num - 1
mas(1) = mas(1) + Cells(i; 6)
mas(2) = mas(2) + Cells(i; 7)
mas(3) = mas(3) + Cells(i; 9)
Next
Cells(Num; 6) = mas(1)
Cells(Num; 6).NumberFormat = "# ##0"
Cells(Num; 7) = mas(2)
Cells(Num; 9) = mas(3)
Cells(Num; 9).NumberFormat = "# ##0"
Cells(Num; 8) = mas(3) / mas(1) * 100
Cells(Num; 8).NumberFormat = "0,00"
Cells(Num; 7).Font.Bold = True
Cells(Num; 9).Font.Bold = True
Range(Cells(Num; 1); Cells(Num; 17)).BorderAround Weight:=xlMedium
Range(Cells(Num; 1); Cells(Num; 17)).Interior.ColorIndex = 15
If DialogPrint("Биржевая Информация"; 1) Then Exit Sub
End Sub
'-------------------------------- Дата -----------------------------
Sub DateChange()
With DialogSheets("ДиалогДата")
.EditBoxes.Text = CurDate
.EditBoxes.InputType = 1
.Show
CurDate = Worksheets("Врем").Cells(1; 4)
If Button = False Then
CurDate = Date
Worksheets("Врем").Cells(1; 4) = CurDate
MsgBox "Дата восстановлена"
Else
If IsDate(.EditBoxes.Text) Then
CurDate = .EditBoxes.Text
MsgBox "Дата изменена"
Worksheets("Врем").Cells(1; 4) = CurDate
Exit Sub
End If
MsgBox "Ошибка при вводе даты"
End If
End With
End Sub
'-------------------------------- Формирование текущей таблицы бумаг ----
Sub FormBum()
Dim L As Object
Dim i; k As Integer
Set L = Worksheets("Бумаги")
CurDate = Worksheets("Врем").Cells(1; 4)
i = 2
k = 1
While L.Cells(i; 1) <> Empty
If L.Cells(i; 2) <= CurDate And L.Cells(i; 3) >= CurDate Then
Worksheets("Врем").Cells(k; 1) = L.Cells(i; 1)
k = k + 1
End If
i = i + 1
Wend
Worksheets("Врем").Cells(1; 2) = k - 1
Set L = Worksheets("Клиенты")
i = 1
While L.Cells(i; 1) <> Empty
i = i + 1
Wend
Worksheets("Врем").Cells(1; 3) = i - 2
End Sub
' ------------------------------- Остатки на бирже --------------------
Sub EditOstBirga(CliNum As Long)
Dim ComBirga; sum; OstBegin As Double
Dim DoFlag As Boolean
Dim Sheet; Sheet1 As Object
Dim i; k; RowNum As Long
Set Sheet = Worksheets("ОстаткиБиржа")
Set Sheet1 = Worksheets("Сделки")
CurDate = Worksheets("Врем").Cells(1; 4)
ComBirga = Worksheets("Инфо").Cells(1; 2)
Sheet.Range("B2").Sort Key1:=Sheet.Range("B2"); Order1:=xlAscending; _
Key2:=Sheet.Range("A2"); Order2:=xlDescending; _
Header:=xlYes; OrderCustom:=1; _
MatchCase:=False; Orientation:=xlTopToBottom
OstBegin = 0
RowNum = 0
k = 2
DoFlag = True
Do While Sheet.Cells(k; 1) <> Empty
If Sheet.Cells(k; 2) = CliNum And DoFlag Then
If Sheet.Cells(k; 1) < CurDate Then
OstBegin = Sheet.Cells(k; 6)
Else
Do While Sheet.Cells(k; 1) <> Empty
If Sheet.Cells(k; 2) <> CliNum Then Exit Do
If Sheet.Cells(k; 1) = CurDate Then
OstBegin = Sheet.Cells(k; 3)
RowNum = k
Exit Do
End If
k = k + 1
Loop
End If
DoFlag = False
End If
k = k + 1
Loop
If RowNum = 0 Then RowNum = k
k = RowNum
sum = 0
i = 2
While Sheet1.Cells(i; 1) <> Empty
If Sheet1.Cells(i; 1) = CurDate And Sheet1.Cells(i; 2) = CliNum Then
If Sheet1.Cells(i; 4) <> Empty Then
sum = sum - _
Sheet1.Cells(i; 4) * Sheet1.Cells(i; 6) * 10000 - _
Format(Sheet1.Cells(i; 4) * Sheet1.Cells(i; 6) * 100 * ComBirga + 0,0001; "0,00")
Else
If Sheet1.Cells(i; 5) = 100 Then ComBirga = 0
sum = sum + _
Sheet1.Cells(i; 5) * Sheet1.Cells(i; 6) * 10000 - _
Format(Sheet1.Cells(i; 5) * Sheet1.Cells(i; 6) * 100 * ComBirga + 0,0001; "0,00")
End If
End If
i = i + 1
Wend
Sheet.Cells(k; 3) = OstBegin
Sheet.Cells(k; 6) = OstBegin + sum + Sheet.Cells(k; 4)
Sheet.Cells(k; 1) = CurDate
Sheet.Cells(k; 2) = CliNum
End Sub
Sub Ok()
Button = True
End Sub
Sub Cancel()
Button = False
End Sub
Sub ПросмотрОтчетов()
Просмотр = True
End Sub
Sub Останов()
ExitVar = True
End Sub
Sub EndOf()
Dim i As Long
i = 2
While Cells(i; 1) <> Empty
i = i + 1
Wend
Cells(i; 1).Select
End Sub
Function DialogPrint(Str As String; Count As Integer)
With DialogSheets("ДиалогПечать")
AgainView:
Просмотр = False
ExitVar = False
Button = False
.Show
If Просмотр Then
Worksheets(Str).PrintPreview
GoTo AgainView
End If
If ExitVar Then
DialogPrint = True
Else
DialogPrint = False
End If
If Button Then ActiveWindow.SelectedSheets.PrintOut copies:=Count
End With
End Function
Function min(a; b)
If Abs(a) > Abs(b) Then
min = Abs(b)
Else
min = Abs(a)
End If
End Function
Приложение № 1.3. Журнал оборотов.
Приложение № 1.4. Журнал лицевого учета.
Приложение № 1.5. Мемориальный ордер.
Приложение № 1.6. Отчет инвестору о совершенных сделках.
Приложение № 1.7. Структура пртфеля в разрезе по бумагам.
Приложение № 1.8. Структура портфеля обобщенная.
Приложение № 1.9. Биржевая информация.
Приложение № 1.10. Еженедельный отчет в депозитарий.
Приложение № 1.11. Ежемесячный отчет в депозитарий.
Приложение № 2. Программа анализа эффективности вложений в РКО.
Приложение 2.1. Текст программы.
Option Explicit
Option Base 1
'*************************** Сортировка *************************
' Процедура сортировки страницы
' Параметры:
' Sheet - лист
' RangeSort - первая ячейка для сортировки
' StrKey1 - сортировка сначала производится по этому столбцу
' StrKey2 - а затем по этому
' StrKey3 - и по этому в последнюю очередь
' OrderType1 - Направление сортировки по столбцу StrKey1
' OrderType2 - Направление сортировки по столбцу StrKey2
' OrderType3 - Направление сортировки по столбцу StrKey3
' Пример использования :
' Call Сортировка(Worksheets("Биржа"); "A2"; "A2"; "B2"; "C2"; xlAscending; xlDescending; xlAscending)
'*****************************************************************
Sub Сортировка(Sheet As Object; RangeSort As String; StrKey1 As String; _
StrKey2 As String; StrKey3 As String; TypeOrder1 As Integer; TypeOrder2 As Integer; TypeOrder3 As Integer)
Sheet.Range(RangeSort).Sort Key1:=Sheet.Range(StrKey1); Order1:=TypeOrder1; Key2:= _
Sheet.Range(StrKey2); Order2:=TypeOrder2; Key3:=Sheet.Range(StrKey3); Order3:= _
TypeOrder3; Header:=xlGuess; OrderCustom:=1; MatchCase:=False _
; Orientation:=xlTopToBottom
End Sub
'******************************* Поиск ***************************
' Функция поиска значения в определенном столбце с определенной позиции вперед/назад
' Параметры:
' Sheet - лист
' Column - колонка для поиска
' Row - начальная строка поиска
' Text - искомое значение
' Direction - направление поиска:
' 1 - вперед
' -1 - назад
' Пример использования :
' MsgBox Поиск(Worksheets("Биржа"); 4; 8; 5; -1)
'*******************************************************************
Function Поиск(Sheet As Object; Column As Integer; Row As Integer; Text; Direction As Integer)
Dim i As Integer
Dim Compare; Compare1
If Direction <> 1 And Direction <> -1 Then
MsgBox "Неверно задано