【发布时间】:2019-04-26 12:07:27
【问题描述】:
我想创建一个函数,该函数返回 Vlookup 的所有返回值的总和。查找值具有由“&”分隔的参数。此外,必须在参数前添加“DD00”的“DD”、“DD0”,以匹配查找范围内的查找值。例如,Cell(1,2)="DD003&03A",该函数应将 DD003 和 DD003A 的返回值相加。以下是我的代码:
Option Explicit
Public Function DPPR_Vlookup(Lookup_Value As String, Lookup_Range As Range, Column_Index As Long, Optional Match_Case As Integer) As Variant
Dim D_Code() As String
Dim Pos_1 As Long
Dim i As Integer
Dim Sum_Value As Long
Dim x1 As Long
Dim x2 As Long
Dim x3 As Long
Pos_1 = InStr(1, Lookup_Value, "&", vbTextCompare)
With Application.WorksheetFunction
If Pos_1 = 0 Then
DPPR_Vlookup = .VLookup(Lookup_Value, Lookup_Range, Column_Index, Match_Case)
Else
D_Code() = Split(Lookup_Value, "&")
Sum_Value = 0
For i = 1 To UBound(D_Code())
If IsError(.VLookup("DD" & D_Code(i), Lookup_Range, Column_Index, Match_Case)) = True Then
x1 = 0
Else
x1 = .VLookup("DD" & D_Code(i), Lookup_Range, Column_Index, Match_Case)
End If
If IsError(.VLookup("DD0" & D_Code(i), Lookup_Range, Column_Index, Match_Case)) = True Then
x2 = 0
Else
x2 = .VLookup("DD0" & D_Code(i), Lookup_Range, Column_Index, Match_Case)
End If
If IsError(.VLookup("DD00" & D_Code(i), Lookup_Range, Column_Index, Match_Case)) = True Then
x3 = 0
Else
x3 = .VLookup("DD00" & D_Code(i), Lookup_Range, Column_Index, Match_Case)
End If
Sum_Value = Sum_Value + x1 + x2 + x3
x1 = 0
x2 = 0
x3 = 0
Next i
DPPR_Vlookup = Sum_Value
End If
End With
End Function
所有带有“&”的参数的结果总是“#VALUE!”。我已将错误考虑在内,该值应为 0。此外,查找范围中存在 DD003 和 DD003A 的值,但该函数仅返回“#VALUE!”。请帮忙。
【问题讨论】:
-
工作表样本和预期结果有助于理解您的查询
-
您能否提供一些示例数据以及如何在公式中使用该函数?见minimal reproducible example。要调试您的函数,请创建一个帮助程序来调用您的函数。这样您就可以使用 F8 逐步完成它并检查哪里出错了。
-
您实际上并没有处理错误。如果未找到查找值,
application.worksheetfunction.vlookup会引发 run-time 错误,这将导致#VALUE!错误。您需要使用application.vlookup,它会返回一个错误值,您可以使用iserror进行检查。