用户创建的功能无法按预期工作

时间:2015-08-04 16:01:08

标签: excel vba function

我想创建一个函数来检查工作表1中的单元格A2是否包含单独列中的任何值。

第1栏(第1页)

  • 婴儿

第1栏(第4页)

  • 婴儿
  • 成人
  • 女儿

我有以下代码:

Function KeepActive(catchAll As String) As String

Dim i As Integer

For i = 1 To 500
    If InStr(catchAll, Sheet4.Cells(i, 1).Value) Then
        catchAll = "match"
    Else
        catchAll = "no match"
    End If
Next i

KeepActive = catchAll

End Function

catchAll指的是第1列中的相应单元格。

因此理论上应该看到代码是否“差”" "婴儿"和儿子"列在第2列。

这应该返回两个"匹配"和一个"没有匹配",但它返回了三个"匹配"。

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:0)

试试这个:

Function KeepActive(catchAll As String) As String

Dim i As Long, rv as string

rv = "no match"
For i = 1 To 500
    If InStr(catchAll, Sheet4.Cells(i, 1).Value) Then
        rv = "match"
        Exit For
    End If
Next i

KeepActive = rv

End Function

答案 1 :(得分:0)

我认为这不起作用的原因是你没有比较试试这个。另外,它将返回0,即True。

KeepActive = "no match"
For i = 1 To 500
    If InStr(catchAll, Sheet4.Cells(i, 1).Value) > 0 Then
        KeepActive= "match"
        exit for 
    End If
Next i

答案 2 :(得分:0)

在您的代码中,您在第一个周期后修改CatchAll。所以你要比较字符串"匹配"或者"没有匹配"而不是原始论点。

此外,您需要在找到匹配项后退出代码。

或者,您可以使用Range.Find方法:

Option Explicit
Function KeepActive(catchAll As String) As String
  Dim C As Range

Set C = Sheet4.Columns(1).Find(what:=catchAll, LookIn:=xlValues, lookat:=xlWhole, _
                MatchCase:=False)

If Not C Is Nothing Then
    KeepActive = "Match"
Else
    KeepActive = "No Match"
End If

End Function

答案 3 :(得分:0)

您可以使用数组公式执行此操作:

=SUM(IF(COUNTIF(Sheet2!A1:A6,A1:A3)>0,1,0))
输入公式后输入

CTRL-SHIFT-ENTER,而不是ENTER。它返回2匹配2。

或者如果你想要一行一行的公式:

=IF(COUNTIF(Sheet2!A$1:A$6,A1)>0,"Match","No Match")

然后向下拖动