【发布时间】:2021-01-28 03:18:23
【问题描述】:
在 Excel 中,可以使用 INDEX 和 MATCH 函数从范围内查找值;
通常使用以下表达式:
=INDEX(tablerange,MATCH(rowval,col1range,0),MATCH(colval,row1range,0))
但是,由于我经常需要此功能,因此我创建了自己的简单自定义 VBA 函数TabVal(),它根据标题列/行中的给定值返回给定范围内的值:
Public Function TabVal(t As Range, r As Range, c As Range)
Dim x, y As Integer
On Error GoTo ERROR
x = Application.WorksheetFunction.Match(r.Cells(1, 1).Value, t.Columns(1), 0)
y = Application.WorksheetFunction.Match(c.Cells(1, 1).Value, t.Rows(1), 0)
TabVal = t.Cells(x, y).Value
Exit Function
ERROR:
TabVal = ""
End Function
这对其他人可能有用。但是在 VBA 中有没有比GoTo ERROR(标签)更好的错误处理方法?
【问题讨论】:
-
使用
Application.Match并使用IsError测试结果是否错误。 -
请注意,这里根本不需要使用
Index:TabVal = t.Cells(x, y).Value。 -
Dim x As Variant, y As Variant如果你使用Application.Match。 -
感谢@BigBen,只是认为甚至不需要 Index()。但是我想要像
If( ! TabVal = t.Cells(x,y).Value ) Then TabVal=""这样的语法 -
这个语法到底是什么意思?
标签: excel vba exception excel-formula office365