我拍摄了这张excel表的快照,如下所示。
D E F
1
2
3 =? 67 a
4 45 b
5 12 c
6 3 d
我想根据以下规则将a,b,c或d中的任何字母分配给D3。
首先,我必须从E3到E6的项目中得到最接近20的数字。在这种情况下E5(12)。
然后,搜索第一步中获得的结果右侧的下一个单元格,以获得字母值 c 。
我的问题是,我必须在D3中执行哪些功能来执行此操作?
答案 0 :(得分:3)
试试这个数组公式:
=INDEX(F$3:F$6,MATCH(MIN(ABS(20-E$3:E$6)),ABS(20-E$3:E$6),0))
使用 Ctrl + Shift + 输入在D3中输入。
答案 1 :(得分:0)
我将向您展示一种稍微不同的方法,如何创建用户定义的函数(UDF)来执行此操作。在这种情况下,它可能不是严格要求,但知道这个过程非常有用。
在某个时刻,常规Excel公式可能变得难以管理和/或不可读,因为它们变得更加复杂,因此有时建议学习如何在VBA中编码。
看看以下功能:
Option Explicit
Public Function getVal(c As String, r As Integer)
getVal = Range(c & CStr(r)).Value
End Function
Public Function paxLookup( _
lkupCol As String, _
dataCol As String, _
sRow As Integer, _
eRow As Integer, _
data As Integer _
) As String
Dim diff As Integer
Dim newdiff As Integer
' Invalid range means no data. '
paxLookup = ""
If eRow < sRow Then Exit Function
' First row is initial best. '
diff = Abs(data - getVal(lkupCol, sRow))
paxLookup = Range(dataCol & CStr(sRow)).Value
sRow = sRow + 1
' Check all rows, getting better ones. '
While sRow <= eRow
newdiff = Abs(data - getVal(lkupCol, sRow))
If newdiff < diff Then
diff = newdiff
paxLookup = getVal(dataCol, sRow)
End If
sRow = sRow + 1
Wend
End Function
将该代码输入Excel Visual Basic编辑器将允许您使用以下公式:
=paxLookup("e","f",3,6,20)
在您的单元格中,获取您之后的信息。论点是:
将VBA用于用户定义的函数允许任意复杂的代码,同时仍然可读。