ExcelmacrosVBA不是
我正在尝试修改我find的代码。 它是一个VBA函数,用于search单元格值的所有实例,然后将每个实例的单元格值返回到一个单元格中。 我试图只返回尚未find的值,因此最终得到一个不包含重复的单元格。
原始代码:
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是我错了。 我的想法是,结果string实际上填充后,我Instr
命令,这是为什么它不起作用。
我相信你正在尝试使用两个If
S。 您只想根据string在范围内添加,并且只有在string尚未添加的情况下才能添加。
尝试这个:
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
这是你在找什么?
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
不完全确定你在用Search_in_col
和Return_val_col
做什么,但你肯定需要使用If Instr() > 0
testing。
如果结果> 1,那么你可能不需要做任何事情。 如果这个结果为0,那么你将需要做你的连接。 这是我不知道为什么你传递search_in_col.cells(i,1).Value
作为search参数,但然后与Return_val_col.Cells(i,1).Value
,所以你不是实际连接你正在使用的值作为search参数…
'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