簡體   English   中英

Excel VBA-對動態范圍使用查找公式

[英]Excel VBA - Using lookup formula for a dynamic range

我正在嘗試將查詢功能與VBA一起用於動態范圍。 下圖是我嘗試測試的幾行數據的示例。 前兩行是我的標題行,它們代表可用數據“年”的“高度”范圍。

黑色字體的數據是我的行數據。 從哪里可以得到代碼的紅色字體數據,這些數據只是該高度在所有可用年份中每個高度的最大值(即最大值)。 現在,我還嘗試使用VBA中的查找功能查找最大值的年份,然后粘貼到右側單元格中,如圖1中的藍色字體所示。我可以使用以下代碼對選定的范圍執行此操作,並生成輸出如圖1所示,但我無法在邏輯上考慮如何針對動態范圍執行此操作。

我的問題是,以黑色突出顯示的行數據是動態范圍,而以紅色突出顯示的數據也將是動態范圍,具體取決於“高度”的數量。 因此,我在努力思考設置黑色和紅色文本兩個范圍並找到最大值的年份的合理方法,如圖1中的藍色所示。如果有人可以給我一些建議,我將非常感激。我可以解決這個問題。 提前致謝!

Sub Lookup()
         Range("K3").Select
        ActiveCell.FormulaR1C1 = _
        "=LOOKUP(RC[-3],RC[-10]:RC[-4],R[-1]C[-10]:R[-1]C[-4])"
        Range("K3").Select
    ActiveCell.FormulaR1C1 = "=LOOKUP(RC[-3],RC1:RC7,R2C1:R2C7)"
    Range("K3").Select
    Selection.AutoFill Destination:=Range("K3:M3"), Type:=xlFillDefault
    Range("K3:M3").Select
    Selection.AutoFill Destination:=Range("K3:M5"), Type:=xlFillDefault
    Range("K3:M5").Select
End Sub

在此處輸入圖片說明

這並不完全是您要執行的操作,但是由於我已經完成並測試了它。 工作時,它會提供您想要的結果,並允許以后輸入更多年。

Private Sub FilterMax()

Dim max10 As Single
Dim max20 As Single
Dim max30 As Single

Dim max10Year As Long
Dim max20Year As Long
Dim max30Year As Long

Dim row As Long
Dim lastRow As Long

Dim firstYear As Long
Dim lastYear As Long
Dim year As Long

Dim sheet As String

lastRow = Sheets("MaxValues").Range("A" & Rows.Count).End(xlUp).row

'You might want to put an input box up or just manually set this.
firstYear = 2012
lastYear = 2014

For row = 2 To lastRow
'reset max for each DataRow
max10 = 0
max10Year = 0
max20 = 0
max20Year = 0
max30 = 0
max30Year = 0

    For year = firstYear To lastYear

    sheet = CStr(year)
    'Max10
    If Sheets(sheet).Cells(row, 2) > max10 Then
        max10 = Sheets(sheet).Cells(row, 2)
        max10Year = Sheets(sheet).Range("G1")
    End If
    'Max20
    If Sheets(sheet).Cells(row, 3) > max20 Then
        max20 = Sheets(sheet).Cells(row, 3)
        max20Year = Sheets(sheet).Range("G1")
    End If
    'Max30
    If Sheets(sheet).Cells(row, 4) > max30 Then
        max30 = Sheets(sheet).Cells(row, 4)
        max30Year = Sheets(sheet).Range("G1")
    End If

    Next year

    Sheets("MaxValues").Cells(row, 2).Value = max10
    Sheets("MaxValues").Cells(row, 2).Font.Color = vbRed

    Sheets("MaxValues").Cells(row, 3).Value = max10Year
    Sheets("MaxValues").Cells(row, 3).Font.Color = vbBlue

    Sheets("MaxValues").Cells(row, 4).Value = max20
    Sheets("MaxValues").Cells(row, 4).Font.Color = vbRed

    Sheets("MaxValues").Cells(row, 5).Value = max20Year
    Sheets("MaxValues").Cells(row, 5).Font.Color = vbBlue

    Sheets("MaxValues").Cells(row, 6).Value = max30
    Sheets("MaxValues").Cells(row, 6).Font.Color = vbRed

    Sheets("MaxValues").Cells(row, 7).Value = max30Year
    Sheets("MaxValues").Cells(row, 7).Font.Color = vbBlue

Next row

End Sub

MaxValues201220132014

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM