繁体   English   中英

Excel宏VBA不是指令

[英]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_colReturn_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM