[英]Excel Macro VBA Not Instr
我正在尝试修改找到的代码。 这是一个VBA函数,它搜索单元格值的所有实例,然后将每个实例的单元格值返回到一个单元格中。 我试图仅返回尚未找到的值,因此最终以不包含重复项的单元格结束。
原始代码:
Function Lookup_concat(Search_string As String, _
Search_in_col As Range, Return_val_col As Range)
Dim i As Long
Dim result As String
For i = 1 To Search_in_col.Count
If Search_in_col.Cells(i, 1) = Search_string Then
result = result & " " & Return_val_col.Cells(i, 1).Value
End If
Next
Lookup_concat = Trim(result)
End Function
我已经对此进行了修改,我缩进了编辑内容,而不是将其保留在同一行上,以便于阅读
Function Lookup_concat(Search_string As String, _
Search_in_col As Range, Return_val_col As Range)
Dim i As Long
Dim result As String
For i = 1 To Search_in_col.Count
If Search_in_col.Cells(i, 1) = Search_string
And Not (InStr(1, result, Return_val_col.Cells(i, 1).Value)) Then
result = result & " " & Return_val_col.Cells(i, 1).Value
End If
Next
Lookup_concat = Trim(result)
End Function
这个版本最接近PHP !strstr
函数(据我所知),也许我尝试将PHP技术应用于VBA就是我的错。 我的想法是,结果字符串实际上是在我的Instr
命令之后填充的,这就是为什么它不起作用的原因。
是您要找的东西吗?
Function Lookup_concat(Search_string As String, Search_in_col As Range, Return_val_col As Range)
Dim i As Long
Dim result As String
For i = 1 To Search_in_col.Count
If InStr(1, Search_in_col.Cells(i, 1).Value, Search_string, vbTextCompare) > 0 Then
result = result & " " & Return_val_col.Cells(i, 1).Value
End If
Next
Lookup_concat = Trim(result)
End Function
我相信您正在尝试使用两个If
。 您只想基于范围内的字符串来添加,也要仅当字符串尚未添加时才添加。
尝试这个:
Function Lookup_concat(Search_string As String, _
Search_in_col As Range, Return_val_col As Range)
Dim i As Long
Dim result As String
For i = 1 To Search_in_col.Count
If (Instr(1, Search_in_col.Cells(i, 1), Search_string) > 0 )
And ( InStr(1, result, Return_val_col.Cells(i, 1).Value) = 0 ) Then
result = result & " " & Return_val_col.Cells(i, 1).Value
End If
Next
Lookup_concat = Trim(result)
End Function
不确定是否要使用Search_in_col
和Return_val_col
但您肯定需要使用If Instr() > 0
测试。
如果结果> 1,则您可能不需要执行任何操作。 如果结果为0,则需要进行串联。 那是我不确定为什么要传递search_in_col.cells(i,1).Value
作为搜索参数,然后将它与Return_val_col.Cells(i,1).Value
串联的Return_val_col.Cells(i,1).Value
,所以实际上您并没有连接您正在用作搜索参数的值...
'if the cell's value exists in the search_string
If InStr(1, Search_in_col.Cells(i, 1).Value, search_string, vbBinaryCompare) > 0 Then
'probably you want to do nothing here, since it's already existing
Else:
'the cell's value does not exist in the search_string, so concatenate it
result = result & " " & "whatever value you want to append to the result"
End If
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.