VBA查找最近值的单元格

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行 我只想先知道使用

我有一个excel文件,看起来像:

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有效吗?你的问题解决了吗?如果是,请验证答案以关闭主题!它工作正常吗?如果是,请在否决票下方打勾确认答案,这样我们就可以结束主题了。如果不是,我们会帮你把它修好。谢谢,我修好了。我验证了两个对我有帮助的答案。