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