Как найти максимальное и минимальное значение диапазонов, которые есть в другой книге? - PullRequest
0 голосов
/ 26 июня 2019

Я создал код VBA, который автоматически копирует данные из других рабочих книг на основе определенной даты и портфолио в активный лист.

Я успешно скопировал всю необходимую информацию, однако мне не хватает2 части.

Я хочу найти минимальное значение в определенном диапазоне в другой книге (которую я открываю с помощью цикла For) и скопировать его на свой активный лист.То же самое относится и к максимуму другого диапазона в открытой рабочей книге.

Ниже приведен код, который у меня есть.Каким-то образом функции

Application.Max(Workbooks(portfolioName).Worksheets("VaR Comparison").Range("J16:J1000")) 

просто возвращают нулевое значение.

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 portfolioDate As String
Dim portfolioName As Variant
Dim ParametricVar As Double
Dim AuM As Double
Dim PreviousVar As Double
Dim PreviousAuM 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 = 26 To Cells(Rows.Count, "B").End(xlUp).Row    
  dateColumn = MatchHeader(portfolioDate)
  portfolioName = ActiveSheet.Range("B" & 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")
  PreviousVar = sheet.Cells(index, dateColumn + 7).Value
  PreviousAuM = sheet.Cells(index, dateColumn + 9).Value

  sheet.Cells(index, dateColumn).Value = ParametricVar / AuM
  sheet.Cells(index, dateColumn + 2).Value = AuM
  sheet.Cells(index, dateColumn + 1).Value = (ParametricVar - PreviousVar) / PreviousVar
  sheet.Cells(index, dateColumn + 3).Value = (AuM - PreviousAuM) / PreviousAuM

  sheet.Cells(index, dateColumn + 5).Value = Application.Min(Workbooks(portfolioName).Worksheets("VaR Comparison").Range("P11:AA11"))
  sheet.Cells(index, dateColumn + 6).Value = Application.Max(Workbooks(portfolioName).Worksheets("VaR Comparison").Range("J16:J1000"))

  wb.Close Savechanges:=False

Next index

End Sub

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Изменить и попробовать:

 Sub test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rng As Range

    Dim Max As Double, Min As Double

    'Set the workbook
    Set wb = Workbooks("Book1")
    'Set the worksheet
    Set ws = wb.Worksheets("Sheet1")
    'Set range
    Set rng = ws.Range("A1:A10")

    Max = Application.WorksheetFunction.Max(rng)
    Debug.Print Max
    Min = Application.WorksheetFunction.Min(rng)
    Debug.Print Min

End Sub
0 голосов
/ 26 июня 2019

Один из ответов был очень хорош.

Если вы хотите просто добавить несколько строк к своей, вы можете попробовать как минимум:

ActiveCell.FormulaR1C1 = "=MIN(R[1]C[-9]:R[37]C[-2])"
Range("CELL YOU WANT IT IN").Select

И для макс:

ActiveCell.FormulaR1C1 = "=MAX(R[1]C[-11]:R[37]C[-4])"
Range("CELL YOU WANT IT IN").Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...