Excel VBA – 使用dynamic范围的查找公式

我正在尝试使用VBA的dynamic范围查找function。 下图是我正在尝试使用的几行数据的示例。 前两行是我的标题行,表示可用数据的每个“年份”的“高度”范围。

黑色字体的数据是我的行数据。 从代码的位置我得到的红色字体数据只是最大值(即最大值)为每个高度的所有可用年份为该高度。 现在我也试图用VBA中的查找functionfind最大值的年份,并粘贴到右边的单元格,如图1中的蓝色字体所示。我可以使用以下代码对所选范围执行此操作,并生成输出如图1所示,但是我无法从逻辑上想到如何在dynamic范围内执行此操作。

我的问题是,我用黑色突出显示的行数据是dynamic范围,红色突出显示的数据也将是一个dynamic范围,取决于“高度”的数量。 所以我正在努力想办法设置黑色和红色文本的两个范围的逻辑方法,并find图1中蓝色所示的最大值的年份。如果有人可以给我一些build议我可以解决这个问题。 提前致谢!

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 

在这里输入图像说明

这不完全是你所做的,但是因为我已经完成了它并testing了它。 工作,它提供了你想要的结果,并允许更多年后input。

 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