检查两个数组的值是否相等。 他们只是VBA认为他们不(更新:底部的决议)

我遇到了一个奇怪的问题:我有两个单独的数组,我想匹配3个属性,以确定是否所有三个属性匹配,部分匹配,或不匹配。

我有一个循环来循环通过第一个数组中的值和该循环内的第二个嵌套循环来循环第一个数组的每一行的第二个数组。

这里有个奇怪的地方:我有三个If语句门,它们检查每个数组中的第一个属性(数量)是否相等,然后是第二个属性(trace),最后是最后一个属性(customer)。 我在一个数组中的行项目与数量匹配(因为它应该),但跟踪检查(它不应该在那里)失败。

我已经使用Debug.Print来查看值是否相同。 他们是。 我检查了原始数据的格式是相同的(即没有空格/隐藏字符等)。 我确信当数组从单元格填充时,它使用.Value方法。

即使我已经检查了所有这些,并且Debug.Print显示它们是相同的,但在比较两个值时检查失败。

代码如下:

For RemMatchLoop = LBound(RemAmtMatchArray, 2) To UBound(RemAmtMatchArray, 2) Step 1 PerfectMatchFound = False For MMMatchLoop = LBound(MMAmtMatchArray, 2) To UBound(MMAmtMatchArray, 2) Step 1 If MMAmtMatchArray(MMAmountCol, MMMatchLoop) = RemAmtMatchArray(RemAmountCol, RemMatchLoop) Then Debug.Print "MM Trace: " & MMAmtMatchArray(MMTraceCol, MMMatchLoop) Debug.Print "Rem Trace: " & RemAmtMatchArray(RemTraceCol, RemMatchLoop) If MMAmtMatchArray(MMTraceCol, MMMatchLoop) = RemAmtMatchArray(RemTraceCol, RemMatchLoop) Then If MMAmtMatchArray(MMCustomerCol, MMMatchLoop) = RemAmtMatchArray(RemCustomerCol, RemMatchLoop) Then ReDim Preserve RemPerfectMatchArray(1 To RemLastCol, 1 To RemPerfectMatchCount) As Variant For RemPerfectMatchColFill = 1 To RemInBalanceCol Step 1 RemPerfectMatchArray(RemPerfectMatchColFill, RemPerfectMatchCount) = RemAmtMatchArray(RemPerfectMatchColFill, RemMatchLoop) If RemPerfectMatchColFill = RemAmountCol Then Debug.Print "Perfect Match Amount: " & RemPerfectMatchArray(RemPerfectMatchColFill, RemPerfectMatchCount) End If Next RemPerfectMatchColFill RemPerfectMatchCount = RemPerfectMatchCount + 1 PerfectMatchFound = True End If End If End If Next MMMatchLoop 

以下是Debug.Print所提及的有关该订单项的内容:

 MM Trace: 1234 Rem Trace: 1234 

所以,这两个痕迹是相同的,但是当它通过线:

 If MMAmtMatchArray(MMTraceCol, MMMatchLoop) = RemAmtMatchArray(RemTraceCol, RemMatchLoop) Then 

它检测到他们不相等。

更新:一种是双重的,另一种是string。 不知道为什么,因为产生一个string值的数组所产生的数据不是文本格式,而是一个数字。

此外,当数据填充到数组中时,它使用.Value方法,如下所示:

 For RemAmtMatchColFill = 1 To RemLastCol Step 1 RemAmtMatchArray(RemAmtMatchColFill, RemAmtMatchCount) = RemWS.Cells(RemAmtMatchLoop, RemAmtMatchColFill).Value Next RemAmtMatchColFill 

不知道为什么然后它检测到一个string…

任何帮助将不胜感激,因为我完全困惑。

解决scheme使用注释中build议的Typename()来标识要比较的types后,确定Variant数组将两个源数据中的货币数据types转换为一个数组中的Doubletypes,另一个中的Stringtypes。 虽然奇怪的是这样做,通过使用CStr()将两个值转换为string,而比较固定的问题。

谢谢! 乔