VBA查找最近值的单元格
我有一个excel文件,看起来像:VBA查找最近值的单元格,vba,find,cell,closest,Vba,Find,Cell,Closest,我有一个excel文件,看起来像: 12123 51212 12123.5 45832 12124 37656 12124.5 32987 12125 42445 以此类推,其中A列总是增加0.5,B列有一定的输出 现在我在单元格E2中有一个特定的值,比如12124,23,我想要一个VBA代码返回,在这种情况下,最佳匹配值在单元格A3中,因为我在进一步的代码中需要这个单元格位置,我不需要B列中的相应值。但是,我不知道如何开始。该文件最多可以有30000行 我只想先知道使用
12123 51212
12123.5 45832
12124 37656
12124.5 32987
12125 42445
以此类推,其中A列总是增加0.5,B列有一定的输出
现在我在单元格E2中有一个特定的值,比如12124,23,我想要一个VBA代码返回,在这种情况下,最佳匹配值在单元格A3中,因为我在进一步的代码中需要这个单元格位置,我不需要B列中的相应值。但是,我不知道如何开始。该文件最多可以有30000行
我只想先知道使用哪种方法,然后我会尝试自己编写代码,当然:)
JV您需要先对A列中的数据进行排序(从最小到最大),然后使用一个简单的查找公式:
=查找(E2,A:A)
如果您不想对数据进行排序,则可以使用类似的VBA循环-但是这是非常低效的-您应该始终使用工作表公式,以便:
Sub SO()
Dim resultCell As Excel.Range
Dim checkCell As Double
Dim bestDiff As Double
checkCell = Range("E2").Value
bestDiff = checkCell
For i = 1 To Range("A" & Rows.count).End(xlUp).Row
If Range("A" & i).Value <= checkCell Then
If (checkCell - Range("A" & i).Value) < bestDiff Then
bestDiff = checkCell - Range("A" & i)
Set resultCell = Range("A" & i)
End If
End If
Next i
MsgBox "Best match is in " & resultCell.Address
Set resultCell = Nothing
End Sub
Sub-SO()
将结果单元格设置为Excel.Range
双色暗格子
模糊最佳差分为双
checkCell=范围(“E2”).值
bestDiff=检查单元
对于i=1到范围(“A”&Rows.count).End(xlUp).Row
如果范围(“A”&i).Value可以使用VLOOKUP函数:-
Application.WorksheetFunction.VLOOKUP(lookup_value, table_array, column_index, range_lookup)
按以下方式设置您的值:-
lookup_value = 12124.23
table_array = would be the range Ax:Bx containing your values
column_index = 2 (the second column of table_array)
range_lookup = true
将range_lookup设置为true意味着如果vlookup没有找到精确的值,它将返回最接近的匹配
注意:只有当A列中的值按升序排序时,这才有效
希望这有帮助。您不必使用VBA解决您的问题,Excel会做得很好
试试这个
=vlookup(E2;A:A;2;true)
对于您试图执行的操作,您必须以升序方式对A列进行排序,否则您将得到一个错误
如果你在VBA中需要它
一个简单的for+if结构,测试如下
Function pr24(ByVal Value_To_Match As Double) As Range
For i = 2 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) > Value_To_Match Then
If Abs(Cells(i - 1, 1) - Value_To_Match) >= Abs(Cells(i, 1) - Value_To_Match) Then
pr24 = Range(Cells(i, 1))
Else
pr24 = Range(Cells(i - 1, 1))
End If
Exit For
Else
End If
Next i
End Function
也可以使用工作表函数Vlookup
Application.WorksheetFunction.VLOOKUP()
你不需要VBA,一个call-co-VLOOKUP-Excel函数就可以了;记住将最后一个参数设置为true,以查找与搜索值不完全匹配的值
它应该类似于:
=VLOOKUP(E2,A:B,2,true)我澄清了我的描述,我在寻找返回包含最近值的单元格位置的VBA代码。我澄清了我的描述,我在寻找返回包含最近值的单元格位置的VBA代码。我澄清了我的描述,我正在寻找一个返回包含最近值的单元格位置的VBA代码。我澄清了我的描述,我正在寻找一个返回包含最近值的单元格位置的VBA代码。@024pr有效吗?你的问题解决了吗?如果是,请验证答案以关闭主题!它工作正常吗?如果是,请在否决票下方打勾确认答案,这样我们就可以结束主题了。如果不是,我们会帮你把它修好。谢谢,我修好了。我验证了两个对我有帮助的答案。