我创建了一个函数searchRow来获取目标值的行。
对于参数来说value,如何设置这个参数作为判断标准呢?所以我可以使用 excel 中的函数searchRow(<3, A1:A100),而不是仅像这样的值searchRow(10, A1:A100)
Function searchRow(value As String, targetRange As range) As Double
Dim currentRange As range
For Each currentRange In targetRange.Cells
If currentRange.value = value Then
searchRow = currentRange.Row
Exit For
End If
Next currentRange
End Function
Run Code Online (Sandbox Code Playgroud)
您可以利用Worksheet.Evaluate此处,并在每次迭代时完成表达式,以便在该工作表的上下文中对其进行评估:
Public Function SearchRow(ByVal Value As Variant, ByVal TargetRange As Range) As Variant
If IsError(Value) Then
SearchRow = Value
Exit Function
End If
Dim Context As Worksheet
Set Context = TargetRange.Parent
Dim CurrentRange As Range
Dim ValueExpression As String
Dim ExpressionResult As Variant
Dim Operators As Variant
Operators = Array("<", "<=", "=", "!=", "=>", ">")
Dim LocalValue As String
Dim ValueString As String
Dim HasOperator As Boolean
For Each CurrentRange In TargetRange.Cells
LocalValue = Value
ValueString = CurrentRange.Value
ValueExpression = vbNullString
ExpressionResult = Empty
HasOperator = False
Dim CurrentOperator As Long
For CurrentOperator = LBound(Operators) To UBound(Operators)
If Len(ValueString) > Len(CurrentOperator) Then
If Left$(ValueString, Len(CurrentOperator)) = CurrentOperator Then
HasOperator = True
Exit For
End If
End If
Next
'if there's no operator, assume equals and still evaluate:
If Not HasOperator And IsNumeric(Value) Then LocalValue = "=" & Value
If ValueString <> vbNullString Then
ValueExpression = ValueString & LocalValue
On Error Resume Next
ExpressionResult = CBool(Context.Evaluate(ValueExpression))
On Error GoTo 0
If Err.Number <> 0 Then
SearchRow = CVErr(xlErrValue)
Exit Function
End If
If Not IsEmpty(ExpressionResult) Then
'now we know the result is safe to meaningfully treat as a Boolean:
If ExpressionResult Then
SearchRow = CurrentRange.Row
Exit Function
End If
End If
End If
Next CurrentRange
SearchRow = CVErr(xlErrNA)
End Function
Run Code Online (Sandbox Code Playgroud)
请注意如何Variant利用返回类型为工作表生成一些有意义的错误代码。
由于第一个参数是 a,String当我们打算给它一个字符串文字时,我们需要用双引号将第一个参数括起来,因此用法看起来像=SearchRow("<3",A1:A100), 但也可以处理42or SomeNamedRange,并且会像SUM给定 a那样失败输入中的错误值。
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |