Excel VBA字符串串联不';如果我使用通配符,则无法工作*&引用;

Excel VBA字符串串联不';如果我使用通配符,则无法工作*&引用;,excel,vba,Excel,Vba,这段代码将两个单元格值连接起来,创建一个字符串,然后在VB数组中搜索该字符串。如果我在连接中不使用“*”,它会工作,如果我使用,它会打断下面的块 有什么想法吗 有效的代码: For i = 1 To StringsCount arrStrings(i, 1) = .Range("A" & i + k).Value & "_" & .Range("C" & i + k).Value & "_" & .Range("D" & i + k).

这段代码将两个单元格值连接起来,创建一个字符串,然后在VB数组中搜索该字符串。如果我在连接中不使用“*”,它会工作,如果我使用,它会打断下面的块

有什么想法吗

有效的代码:

For i = 1 To StringsCount
  arrStrings(i, 1) = .Range("A" & i + k).Value & "_" & .Range("C" & i + k).Value & "_" & .Range("D" & i + k).Value & "_" & .Range("E" & i + k).Value
  arrStrings(i, 2) = .Range("A" & i + k).Row                      
  k = k + 11
Next i
For i = 1 To StringsCount
  arrStrings(i, 1) = .Range("A" & i + k).Value & "_" & .Range("C" & i + k).Value & "_" & .Range("D" & i + k).Value & "_" & .Range("E" & i + k).Value & "*"
  arrStrings(i, 2) = .Range("A" & i + k).Row
  k = k + 11
Next i
interSum = 0

For i = 1 To UBound(arrStrings)
  For j = LBound(arrCampaignsAmounts, 1) To UBound(arrCampaignsAmounts, 1)
    If arrStrings(i, 1) = arrCampaignsAmounts(j, 1) Then
      interSum = interSum + arrCampaignsAmounts(j, 2)  
    End If
   Next j
不起作用的代码:

For i = 1 To StringsCount
  arrStrings(i, 1) = .Range("A" & i + k).Value & "_" & .Range("C" & i + k).Value & "_" & .Range("D" & i + k).Value & "_" & .Range("E" & i + k).Value
  arrStrings(i, 2) = .Range("A" & i + k).Row                      
  k = k + 11
Next i
For i = 1 To StringsCount
  arrStrings(i, 1) = .Range("A" & i + k).Value & "_" & .Range("C" & i + k).Value & "_" & .Range("D" & i + k).Value & "_" & .Range("E" & i + k).Value & "*"
  arrStrings(i, 2) = .Range("A" & i + k).Row
  k = k + 11
Next i
interSum = 0

For i = 1 To UBound(arrStrings)
  For j = LBound(arrCampaignsAmounts, 1) To UBound(arrCampaignsAmounts, 1)
    If arrStrings(i, 1) = arrCampaignsAmounts(j, 1) Then
      interSum = interSum + arrCampaignsAmounts(j, 2)  
    End If
   Next j
(第二行,在远端,有额外的通配符字符'&'')*

块“不工作”会打断下面的块(引用行):

For i = 1 To StringsCount
  arrStrings(i, 1) = .Range("A" & i + k).Value & "_" & .Range("C" & i + k).Value & "_" & .Range("D" & i + k).Value & "_" & .Range("E" & i + k).Value
  arrStrings(i, 2) = .Range("A" & i + k).Row                      
  k = k + 11
Next i
For i = 1 To StringsCount
  arrStrings(i, 1) = .Range("A" & i + k).Value & "_" & .Range("C" & i + k).Value & "_" & .Range("D" & i + k).Value & "_" & .Range("E" & i + k).Value & "*"
  arrStrings(i, 2) = .Range("A" & i + k).Row
  k = k + 11
Next i
interSum = 0

For i = 1 To UBound(arrStrings)
  For j = LBound(arrCampaignsAmounts, 1) To UBound(arrCampaignsAmounts, 1)
    If arrStrings(i, 1) = arrCampaignsAmounts(j, 1) Then
      interSum = interSum + arrCampaignsAmounts(j, 2)  
    End If
   Next j
SourceSheet.Range(“H”和arrStrings(i,2)).Value=interSum


您是否可以避免使用通配符而改用
InStr
?所以,而不是

If arrStrings(i, 1) = arrCampaignsAmounts(j, 1) Then
你会的

If InStr(arrCampaignsAmounts(j, 1),arrStrings(i, 1)) > 0 Then
使用初始的无通配符字符串形式。这应该是可行的,因为
InStr
如果没有找到匹配项,将返回0。
类似地,如果您希望您的
arrStrings
值始终是您要匹配的字符串的开头,您可以使用
=1
而不是
>0

您是否尝试过
如果arrsamounts(j,1)与arrStrings(i,1)类似,则
使用通配符?即使使用类似的值,仍然是全零:(.嗯,我会使用一维数组的方法,但没有数据来测试任何可能的解决方案。我提出的任何方法都不太可能与您的方法非常接近。如果我没有弄错的话,arrStrings中的字符串“Belgium_gdn_Janu_np”将在“Belgium_gdn_Janu_np(FL)”中的ArrCampactiveSamounts中找到字符串及其添加到amount interSum?Yes-
InStr
中的相应值将返回1,因为它将在“Belgium\u gdn\u Janu\u np(FL)”的位置1找到字符串“Belgium\u gdn\u Janu\u np”