任何人都可以建议一个 VBA 解决方案来提供帮助吗?我正在尝试将一行数据(多个标准)与同一数据集中的其他行进行比较,然后用标识符对其进行标记以供以后使用。这是一个更大的 VBA 代码项目的一部分,我正在寻找一种方法来尽可能有效地比较数据,因为数据可能超过 10K 行。到目前为止,我使用 if/then 数组尝试的所有操作都不会产生所需的结果,并且会将行与自身进行比较,这是不必要的。我不精通 VBA,所以可能忽略了一个简单的解决方案。
示例代码尝试和附加数据。任何帮助是极大的赞赏。
Arr1 = WS.ListObjects("mockdata").DataBodyRange.Value
For i = 1 To UBound(Arr1)
If Arr1(i, 1) = "AC" Then
For j = 1 To UBound(Arr1)
'concat doctype/reference/amount for comparison
If Arr1(i, 1) & Arr1(i, 4) & Arr1(i, 3) = Arr1(j, 1) & Arr1(j, 4) & Arr1(j, 3) * -1 Then
Arr1(i, 7) = "ZD"
ElseIf Arr1(i, 1) & Arr1(i, 4) & Arr1(i, 3) <> Arr1(j, 1) & Arr1(j, 4) & Arr1(j, 3) * -1 Then
Arr1(i, 7) = "CFWD"
End If
Exit For
Next j
ElseIf Arr1(i, 1) = "XJ" Then
For j = 1 To UBound(Arr1)
If Arr1(j, 1) = "PY" Then
For k = 1 To UBound(Arr1)
'concat reference/co for comparison
If Arr1(i, 4) & Arr1(i, 5) = Arr1(k, 4) & Arr1(k, 5) And Arr1(i, 3) + Arr1(k, 3) = "0" Then
Arr1(i, 7) = "ZD"
ElseIf Arr1(i, 4) & Arr1(i, 5) = Arr1(k, 4) & Arr1(k, 5) And Arr1(i, 3) + Arr1(k, 3) <> "0" Then
Arr1(i, 7) = "Variance"
'if ref match but co does not
ElseIf Arr1(i, 4) = Arr1(k, 4) And Arr1(i, 3) + Arr1(k, 3) = "0" And Arr1(1, 5) <> Arr1(k, 5) Then
Arr1(i, 7) = "Cross Co"
ElseIf Arr1(i, 4) = Arr1(k, 4) And Arr1(i, 3) + Arr1(k, 3) <> "0" And Arr1(1, 5) <> Arr1(k, 5) Then
Arr1(i, 7) = "Cross Co/Variance"
End If
Next k
End If
Next j
ElseIf Arr1(i, 1) = "PY" Then
For j = 1 To UBound(Arr1)
If Arr1(j, 1) = "XJ" Then
For k = 1 To UBound(Arr1)
'concat reference/co for comparison
If Arr1(i, 4) & Arr1(i, 5) = Arr1(k, 4) & Arr1(k, 5) And Arr1(i, 3) + Arr1(k, 3) = "0" Then
Arr1(i, 7) = "ZD"
ElseIf Arr1(i, 4) & Arr1(i, 5) = Arr1(k, 4) & Arr1(k, 5) And Arr1(i, 3) + Arr1(k, 3) <> "0" Then
Arr1(i, 7) = "Variance"
'if ref match but co does not
ElseIf Arr1(i, 4) = Arr1(k, 4) And Arr1(i, 3) + Arr1(k, 3) = "0" And Arr1(1, 5) <> Arr1(k, 5) Then
Arr1(i, 7) = "Cross Co"
ElseIf Arr1(i, 4) = Arr1(k, 4) And Arr1(i, 3) + Arr1(k, 3) <> "0" And Arr1(1, 5) <> Arr1(k, 5) Then
Arr1(i, 7) = "Cross Co/Variance"
End If
Next k
End If
Next j
End If
Next i
Range("A2").Resize(UBound(Arr1, 1), 7).Value = Arr1
