我想创建一个函数来检查工作表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列。
这应该返回两个"匹配"和一个"没有匹配",但它返回了三个"匹配"。
有什么想法吗?
谢谢!
答案 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")
然后向下拖动