В настоящее время я работаю над кодом VBA, в котором вы вводите дату в поле ввода в следующей форме: ГГГГ-ММ.
Затем я использую функцию, которая находит ячейку, значение которой совпадает со значениемвведите поле и скопируйте информацию в строках ниже ячейки с указанной датой.Каждые 7 столбцов используются для данных за одну дату (1-й столбец - это значение риска, 2-й ряд - это изменение значения риска, 3-й столбец - рыночная стоимость, 4-й - изменение рыночной стоимости и т. Д.) И каждая строкапредставляет другое портфолио.Данные для каждого портфеля копируются из других рабочих книг.
Следующие 7 столбцов относятся к данным за предыдущий месяц.
Теперь я хочу рассчитать изменение значения риска в зависимости от месяца.
ВыполнениеИтак, мне нужно найти дату месяца, которая предшествовала дате, введенной в поле ввода, и скопировать значение риска из этого столбца, присвоить его переменной и, наконец, найти вариацию благодаря формуле: (текущее значениев группе риска - предыдущее значение в группе риска) / (предыдущее значение в группе риска).То же самое касается изменения рыночной стоимости.
Я понятия не имею, как это сделать, так как я очень плохо знаком с VBA.Любая помощь приветствуется.Вот что у меня есть:
Option Explicit
Function MatchHeader(strSearch As String) As Long
Dim myRight As Long, Colcount As Long
myRight = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column
For Colcount = 1 To myRight
If ActiveSheet.Cells(1, Colcount) = strSearch Then
MatchHeader = Colcount
Exit For
End If
Next Colcount
End Function
Sub StressTest()
Dim index As Integer
Dim dateColumn As Integer
Dim portfolioName As Variant
Dim portfolioDate As String
Dim ParametricVar As Double
Dim AuM As Double
Dim strPath As String
Dim strFilePath As String
Dim wb As Workbook
Dim sheet As Worksheet
Set wb = ThisWorkbook
Set sheet = ActiveSheet
portfolioDate = InputBox("Please enter date under the following form : YYYY-MM", "Date at the time of Stress Test", "Type Here")
Debug.Print "InputBox provided value is: " & portfolioDate
For index = 3 To Cells(Rows.Count, "A").End(xlUp).Row
dateColumn = MatchHeader(portfolioDate)
portfolioName = ActiveSheet.Range("A" & index & "").Value
strPath = "G:\Risk\Risk Reports\VaR-Stress test\" & portfolioDate & "\" & portfolioName & ""
Set wb = Workbooks.Open(strPath)
ParametricVar = Workbooks(portfolioName).Worksheets("VaR Comparison").Range("B19")
AuM = Workbooks(portfolioName).Worksheets("Holdings - Main View").Range("E11")
sheet.Cells(index, dateColumn).Value = ParametricVar / AuM
sheet.Cells(index, dateColumn + 2).Value = AuM
sheet.Cells(index, dateColumn + 5).Value = Application.WorksheetFunction.Min(Workbooks(wb).Worksheets("VaR Comparison").Range("P11:AA11"))
sheet.Cells(index, dateColumn + 6).Value = Application.WorksheetFunction.Max(Workbooks(wb).Worksheets("VaR Comparison").Range("J16:J1000"))
wb.Close Savechanges:=False
Next index
End Sub