这段代码连接几个单元格值会创建一个字符串,然后在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
SourceSheet.Range(" H"& arrStrings(i,2))。Value = interSum
interSum = 0
Next i
答案 0 :(得分:2)
您是否可以避免使用通配符并使用InStr
代替?所以,而不是
If arrStrings(i, 1) = arrCampaignsAmounts(j, 1) Then
你有
If InStr(arrCampaignsAmounts(j, 1),arrStrings(i, 1)) > 0 Then
初始没有通配符字符串形成。这应该有效,因为InStr
如果找不到匹配将返回0。
同样,如果您希望arrStrings
值始终是您要匹配的字符串的开头,则可以使用=1
而不是>0
。