比较 2 个不同大小的动态数组,看看有多少匹配
Comparing 2 Dynamic Arrays of different sizes and seeing how many match
我有 2 个动态数组,第一个数组包含 15,000 个值,位于 Sheet1 上。第二个数组有 519 个值,位于 Sheet2 上。
第一个数组中的所有值都应该在第二个数组中,因为第一个数组包含重复的值。
我想做的是将第一个数组与第二个数组进行比较,然后 return 匹配的百分比。 (应该是100%)。
显示的代码仅包含动态数组和用于检查数组的 L 和 U 边界的公式的开头。但是我坚持公式应该说什么。
Dim ws As Worksheet
Dim wb As Workbook
Dim ISRC() As Variant
Dim ISRC2() As Variant
Set wb = Workbooks("Recordssales2019-04-05")
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = wb.Worksheets("Recordssales2019-04-")
Set ws2 = wb.Worksheets("Metadata")
Lastrow = ws1.Range("E100000").End(xlUp).Row
ReDim ISRC(1 To Lastrow + 1)
MsgBox Lastrow
Lastrow = ws2.Range("AJ100000").End(xlUp).Row
ReDim ISRC2(1 To Lastrow + 1)
MsgBox Lastrow
For i = LBound(ISRC) To UBound(ISRC)
If ISRC(i) = ISRC2(i) Then
理想情况下,将第一个数组与第二个数组进行比较,并与 return 进行比较,以匹配多少相同的数组。从那里我希望能够根据它们是否匹配来执行下一步。如果它们不匹配,则它们不应包含在下一步中。
试试这个。一次性填充范围中的数组。遍历 ISRC,使用 MATCH 检查每个元素是否在另一个数组中并保留计数。
Sub x()
Dim ws As Worksheet
Dim wb As Workbook, lastrow As Long, i As Long, v As Variant, count As Long
Dim ISRC As Variant
Dim ISRC2 As Variant
Set wb = Workbooks("Recordssales2019-04-05")
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = wb.Worksheets("Recordssales2019-04-")
Set ws2 = wb.Worksheets("Metadata")
lastrow = ws1.Range("E100000").End(xlUp).Row
ISRC = Application.Transpose(ws1.Range("E1:E" & lastrow).Value)
'MsgBox lastrow
lastrow = ws2.Range("AJ100000").End(xlUp).Row
ISRC2 = Application.Transpose(ws2.Range("AJ1:AJ" & lastrow).Value)
'MsgBox lastrow
For i = LBound(ISRC) To UBound(ISRC)
v = Application.Match(ISRC(i), ISRC2, 0)
If IsNumeric(v) Then count = count + 1
Next i
MsgBox count & " elements of ISRC are in ISRC2 (" & Format(count / UBound(ISRC), "0.0%") & ")."
End Sub
我有 2 个动态数组,第一个数组包含 15,000 个值,位于 Sheet1 上。第二个数组有 519 个值,位于 Sheet2 上。
第一个数组中的所有值都应该在第二个数组中,因为第一个数组包含重复的值。
我想做的是将第一个数组与第二个数组进行比较,然后 return 匹配的百分比。 (应该是100%)。
显示的代码仅包含动态数组和用于检查数组的 L 和 U 边界的公式的开头。但是我坚持公式应该说什么。
Dim ws As Worksheet
Dim wb As Workbook
Dim ISRC() As Variant
Dim ISRC2() As Variant
Set wb = Workbooks("Recordssales2019-04-05")
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = wb.Worksheets("Recordssales2019-04-")
Set ws2 = wb.Worksheets("Metadata")
Lastrow = ws1.Range("E100000").End(xlUp).Row
ReDim ISRC(1 To Lastrow + 1)
MsgBox Lastrow
Lastrow = ws2.Range("AJ100000").End(xlUp).Row
ReDim ISRC2(1 To Lastrow + 1)
MsgBox Lastrow
For i = LBound(ISRC) To UBound(ISRC)
If ISRC(i) = ISRC2(i) Then
理想情况下,将第一个数组与第二个数组进行比较,并与 return 进行比较,以匹配多少相同的数组。从那里我希望能够根据它们是否匹配来执行下一步。如果它们不匹配,则它们不应包含在下一步中。
试试这个。一次性填充范围中的数组。遍历 ISRC,使用 MATCH 检查每个元素是否在另一个数组中并保留计数。
Sub x()
Dim ws As Worksheet
Dim wb As Workbook, lastrow As Long, i As Long, v As Variant, count As Long
Dim ISRC As Variant
Dim ISRC2 As Variant
Set wb = Workbooks("Recordssales2019-04-05")
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = wb.Worksheets("Recordssales2019-04-")
Set ws2 = wb.Worksheets("Metadata")
lastrow = ws1.Range("E100000").End(xlUp).Row
ISRC = Application.Transpose(ws1.Range("E1:E" & lastrow).Value)
'MsgBox lastrow
lastrow = ws2.Range("AJ100000").End(xlUp).Row
ISRC2 = Application.Transpose(ws2.Range("AJ1:AJ" & lastrow).Value)
'MsgBox lastrow
For i = LBound(ISRC) To UBound(ISRC)
v = Application.Match(ISRC(i), ISRC2, 0)
If IsNumeric(v) Then count = count + 1
Next i
MsgBox count & " elements of ISRC are in ISRC2 (" & Format(count / UBound(ISRC), "0.0%") & ")."
End Sub