VBA – 从最大范围内设置范围

我想知道是否有一种方法来使用WorksheetFunction.Max函数后设置范围。 所以,如果范围最大值是12/31/2015,我可以将值恢复到单元格范围,即"D10" 。 这是迄今为止的代码。

Sub NetValue()

 Dim lngLastRow As Long, rngCell As Range, rngRange As Range, _ lngMin As Long, lngMax As Long, lngPreviousRow As Long, _ raw As Worksheet, data As Worksheet, dLRow As Double, endDate As Double, _ r As Range, n As Long lngLastRow = lastRow(column_to_check:=2) Set raw = Worksheets("Raw") Set data = Worksheets("Data") Set rngRange = raw.Range(raw.Cells(2, 1), raw.Cells(lngLastRow + 1, 1)) dLRow = data.Range("A1", data.Range("A1").End(xlDown)).Rows.Count raw.Range("J:J").EntireColumn.Insert raw.Range("C:E").EntireColumn.NumberFormat = "mm/dd/yyyy" For Each rngCell In rngRange If Len(rngCell) > 0 Then If lngPreviousRow > 0 And (rngCell.Row - 1 <> lngPreviousRow) Then raw.Cells(lngPreviousRow, 10) = s.Cells(n).Offset(0, 6) End If If (rngCell.Row = 1) Or lngPreviousRow = (rngCell.Row - 1) Then Set r = raw.Range(rngCell.Offset(0, 1), rngCell(0, 2)) Set s = raw.Range(rngCell.Offset(0, 2), rngCell(0, 3)) lngMin = WorksheetFunction.Min(r) lngMax = WorksheetFunction.Max(s) m = Application.Match(lngMin, r, 0) n = Application.Match(lngMax, s, 0) raw.Cells(rngCell.Row, 10) = s.Cells(n).Offset(0, 6) End If lngPreviousRow = rngCell.Row Set r = raw.Range(rngCell.Offset(0, 1), rngCell(0, 2)) Set s = raw.Range(rngCell.Offset(0, 2), rngCell(0, 3)) lngMin = WorksheetFunction.Min(r) lngMax = WorksheetFunction.Max(s) m = Application.Match(lngMin, r, 0) n = Application.Match(lngMax, s, 0) Else Set r = raw.Range(rngCell.Offset(0, 1), rngCell(0, 2)) Set s = raw.Range(rngCell.Offset(0, 2), rngCell(0, 3)) lngMin = WorksheetFunction.Min(r) lngMax = WorksheetFunction.Max(s) End If Next rngCell Cells(lngPreviousRow, 10) = s.Cells(n).Offset(0, 6) 

结束小组 在这里输入图像说明

所以,总之,根据每份合同的结束date,我需要最后一个净值,第一Column I

这是一种方式,取决于你的设置 – 如果它不起作用,你应该发布你的整个代码。 (同时要注意非独特的最大值。)

 Dim n As Long, enddate, r As Range Set r = Range(rngCell.Offset(0, 1), rngCell.Offset(0, 2)) enddate = WorksheetFunction.Max(r) n = Application.Match(enddate, r, 0) raw.Cells(rngCell, 10) = r.Cells(n).Offset(0, 5)