根据Key的最近数字匹配显示行值

时间:2014-02-20 20:31:34

标签: excel excel-vba vba

假设我在A列中有一个排序的值列表。它们用作每个数字行的“键”。像这样:

   ___A_(key)_______B______         ______G_____
1 |____2.58___|____________|   ... |____________|   ... 
2 |____2.69___|____________|   ... |____________|   ...
        ...         ...                  ...
   ________________________         ____________
x |____5.69___|____________|   ... |____________|   ...

B列到G列的每个键都有一些值,因此它基本上是数字数据的2D电子表格。

我需要能够通过近似值快速访问某一行。

现在我在列上设置了一个过滤器,可以搜索行,但为此我需要准确输入键值,即2.582.69,但不是比如2.64

我希望能够输入类似2.64的内容,并向我显示具有最近键值的行,最好是在单独的位置,例如在表格的一侧,例如从列开始我可以在哪里定义,但基本上我输入一个值并方便地显示行值的方法。我怎么能这样做?

我的经验水平是:我在VBA / excel中做了一些简单的事情〜10年前...并且基本上寻找一个良好的起点方向和方法。

2 个答案:

答案 0 :(得分:2)

假设您的数据位于A1:A20且您的查找值位于B1,则此公式将返回最接近的数据:

=INDEX(A1:A20,MATCH(MIN(ABS(A1:A20-B1)),ABS(A1:A20-B1),0))

输入时请务必按 Ctrl + Shift + Enter 只需输入

获得最小的差异然后将其行返回索引,然后索引返回该值。

答案 1 :(得分:0)

这就是我的想法,你循环遍历所有行,并获得目标与该单元格中的值之间的差异。您会找到给出最小差异的行,这将是您的目标行。

Dim dblErr As Double
Dim intIndex As Integer
Dim i As Integer
Dim dblTarget As Double

dblTarget = 'Value you are after
dblErr = 10000 ' or some other large number
For i = 1 To x 'x= number of rows
    If dblErr > Abs(Cells(i + 1, 1) - dblTarget) Then
        dblErr = Abs(Cells(i + 1, 1) - dblTarget)
        intIndex = i
    End If
Next i

Ans = Cells(intIndex, 1)