假设我在A列中有一个排序的值列表。它们用作每个数字行的“键”。像这样:
___A_(key)_______B______ ______G_____
1 |____2.58___|____________| ... |____________| ...
2 |____2.69___|____________| ... |____________| ...
... ... ...
________________________ ____________
x |____5.69___|____________| ... |____________| ...
B列到G列的每个键都有一些值,因此它基本上是数字数据的2D电子表格。
我需要能够通过近似值快速访问某一行。
现在我在列上设置了一个过滤器,可以搜索行,但为此我需要准确输入键值,即2.58
或2.69
,但不是比如2.64
。
我希望能够输入类似2.64
的内容,并向我显示具有最近键值的行,最好是在单独的位置,例如在表格的一侧,例如从列开始我可以在哪里定义,但基本上我输入一个值并方便地显示行值的方法。我怎么能这样做?
我的经验水平是:我在VBA / excel中做了一些简单的事情〜10年前...并且基本上寻找一个良好的起点方向和方法。
答案 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)