Excel 通过查找找到最近的号码?
有没有办法从表格中找到最接近的数字 示例-我有以下一组数字Excel 通过查找找到最近的号码?,excel,excel-formula,Excel,Excel Formula,有没有办法从表格中找到最接近的数字 示例-我有以下一组数字 Column 1 Column 2 € 1,187,385 € 19,547.82 € 949,430 € 30,404.75 € 935,216 € 19,704.01 € 907,508 € 28,912.47 € 865,841 € 21,698.54 € 844,429 € 26,468.55 € 741,769 € 26,687.78 € 729,647
Column 1 Column 2
€ 1,187,385 € 19,547.82
€ 949,430 € 30,404.75
€ 935,216 € 19,704.01
€ 907,508 € 28,912.47
€ 865,841 € 21,698.54
€ 844,429 € 26,468.55
€ 741,769 € 26,687.78
€ 729,647 € 28,750.40
€ 711,840 € 11,909.60
€ 690,197 € 22,172.20
€ 659,998 € 15,919.33
€ 657,956 € 9,134.46
€ 648,282 € 13,700
€ 634,949 € 7,802
€ 631,214 € 6,407
我有一个查找值730000-因为这不是100%匹配-有没有办法找到与该数字最接近的匹配(730,00)-意识到它是729647&然后告诉excel在第2列显示该数字(28780.40)
还有几个例子:
如果我搜索A列中的数字,结果如下
€ 730,000 € 26,687.78
€ 1,239,636 € 19,547.82
€ 693,365 € 22,172.20
€ 631,283 € 6,407
Vlookup与真匹配您可以使用:
Option Explicit
Sub test()
Dim i As Long, j As Long, LastRowA As Long, LastRowD As Long
Dim Value As Long
Dim Differ As Long
Dim Result As Double
With ThisWorkbook.Worksheets("Sheet1")
LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
LastRowD = .Cells(.Rows.Count, "D").End(xlUp).Row
Differ = 0
For i = 2 To LastRowD
Value = .Range("D" & i).Value
For j = 2 To LastRowA
If j = 2 Then
Differ = Abs(Value - .Range("A" & j).Value)
Result = .Range("B" & j).Value
Else
If Abs(Value - .Range("A" & j).Value) < Differ Then
Differ = Abs(Value - .Range("A" & j).Value)
Result = .Range("B" & j).Value
End If
End If
Next j
.Range("E" & i).Value = Result
Next i
End With
End Sub
选项显式
子测试()
我长,j长,LastRowA长,LastRowD长
模糊值等于长
只要不同就不同
结果是双倍的
使用此工作簿。工作表(“表1”)
LastRowA=.Cells(.Rows.Count,“A”).End(xlUp).Row
LastRowD=.Cells(.Rows.Count,“D”).End(xlUp).Row
差=0
对于i=2到最后一行
值=.Range(“D”&i).Value
对于j=2到最后一行a
如果j=2,则
差异=绝对值(值-.范围(“A”&j).值)
结果=.Range(“B”&j).Value
其他的
如果Abs(值-.范围(“A”&j.值)<不同,则
差异=绝对值(值-.范围(“A”&j).值)
结果=.Range(“B”&j).Value
如果结束
如果结束
下一个j
.范围(“E”和i).值=结果
接下来我
以
端接头
结果:
这个公式应该适用于:
=IF(LOOKUPVAL>MAX(COLUMN1),FIRSTVAL,INDEX(COLUMN2,IF(ABS(LOOKUPVAL-INDEX(COLUMN1,MATCH(LOOKUPVAL,COLUMN1,-1)))<ABS(LOOKUPVAL-INDEX(COLUMN1,MATCH(LOOKUPVAL,COLUMN1,-1)+1)),MATCH(LOOKUPVAL,COLUMN1,-1),MATCH(LOOKUPVAL,COLUMN1,-1)+1)))
由于您的值是按降序排序的,因此我们使用-1
第三个参数。为方便起见,我们将其称为INDEX1
B。由于您的值是按降序排列的,因此第1列中的下一个值将小于LOOKUPVAL
。我们可以通过以下方式获取其索引:
=INDEX1+1
我们将其称为INDEX2
C。我们可以查找与这两个索引相关的值:
=INDEX(COLUMN1,INDEX1)
=INDEX(COLUMN1,INDEX2)
我们将分别称之为VALUE1和VALUE2
D。我们通过以下公式得到LOOKUPVAL
与VALUE1和VALUE2之间的距离
=ABS(LOOKUPVAL-VALUE1)
=ABS(LOOKUPVAL-VALUE2)
我们将分别称之为距离1和距离2
E。我们根据距离1和距离2中较小的一个来获得所需的指数:
=IF(DISTANCE1<DISTANCE2,INDEX1,INDEX2)
G。要在这个答案的顶部得到冗长而繁琐的公式,你需要从底部开始,然后再从后面替换
H。作为最后一步,我们需要保护MATCH
函数在查找大于第1列中任何数字时不出错。要做到这一点,我们将整个内容包装在IF
中:
=IF(LOOKUPVAL>MAX(COLUMN1),FIRSTVAL,Proceed as described above)
希望有帮助另一个可能的解决方案是这样的ARRAY-FORMULA CTRL+SHIFT+ENTER 这只是查找
lookupvalue
与数据之间的最小绝对差值
=INDEX(COLUMN2,DESIREDINDEX)
=IF(LOOKUPVAL>MAX(COLUMN1),FIRSTVAL,Proceed as described above)
=IFERROR(VLOOKUP(C1+MIN(ABS(C1-$A$1:$A$15)),$A$1:$B$15,2,0),VLOOKUP(C1-MIN(ABS(C1-$A$1:$A$15)),$A$1:$B$15,2,0))