Excel VBA字符串串联不';如果我使用通配符,则无法工作*&引用;
这段代码将两个单元格值连接起来,创建一个字符串,然后在VB数组中搜索该字符串。如果我在连接中不使用“*”,它会工作,如果我使用,它会打断下面的块 有什么想法吗 有效的代码: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).
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”