2016-02-15 94 views
1

这一小段代码串接几个单元格值创建一个字符串,然后将其搜索在VB数组。如果我不使用“*”串联,它可以工作,如果我这样做,则打破下面的块。VBA字符串连接不起作用“*”

任何想法?该工程

代码:

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))值= interSum

interSum = 0 
Next i 
+0

你试过了吗?如果arrCampaignsAmounts(j,1)LIKE arrStrings(i,1)Then'与通配符? – Jeeped

+0

即使使用LIKE,仍然全部为零:(。 –

+0

那么,我会使用[数组筛选器](https://msdn.microsoft.com/en-us/library/fat7fw0s%28v=vs.90%29.aspx )方法,但没有数据来测试任何可能的解决方案,我想出的任何东西都不太可能与您的远程接近。 – Jeeped

回答

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

+0

如果我正确地得到这个结果,那么从arrStrings中得到一个字符串“Belgium_gdn_january_np”将在“Belgium_gdn_january_np_(FL)”字符串中的arrCampaignsAmounts中找到,并将其相应的值添加到interSum中? –

+0

是 - “InStr”将返回1,因为它会在“Belgium_gdn_january_np_(FL)”的位置1处找到字符串“Belgium_gdn_january_np” – asongtoruin