【问题标题】:VBA - Set Range from Max in rangeVBA - 从范围内的最大值设置范围
【发布时间】:2017-11-02 15:37:00
【问题描述】:

我想知道在使用WorksheetFunction.Max 函数后是否有办法设置范围。因此,如果最大范围是 2015 年 12 月 31 日,我可以将该值恢复为单元格范围,即"D10"。这是我到目前为止的代码。

子净值()

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)

结束子

因此,简而言之,我需要基于每份合同的结束日期的最后一个净值Column I

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这是一种方法,具体取决于您的设置 - 如果它不起作用,您应该发布整个代码。 (还要注意非唯一的最大值。)

    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)
    

    【讨论】:

    • 我添加了整个代码,并添加了您的编辑。我不确定如何修复它的其余部分。
    • 究竟是什么问题 - 代码不起作用或产生意外结果?
    • 第一个 IF 语句仅适用于 1 年的合同。但是,其他行用于 C 列和 D 列,这是一个不同的功能。我只是将另一个函数复制到这个新函数中。
    • 我不确定你在问什么。你的问题是关于在一个范围内找到最大值的位置。如果还有其他问题,也许您应该发布另一个问题。
    • Application.Match 似乎不起作用。错误类型不匹配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多