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_colReturn_val_col做什么,但你肯定需要使用If Instr() > 0testing。

如果结果> 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