我试图将第1,2和3列与第4,5列和第6列进行比较。第1列和第4列是次数,但它们并不总是排列,所以我希望有一个错误边界2秒。第2列和第5列以及第3列和第6列应始终完全匹配。我希望代码在第1列中运行并检查第3列中的任何值是否在该范围内。如果是,我想看看其他两个值是否匹配。如果它们都匹配,我想将array1和array2中的一些值粘贴到" Sheet2。"关键是我希望它能够快速运行。下面我已经发布了我到目前为止的内容。任何建议/批评/改革都将非常受欢迎!
谢谢,
萨姆
Sub Comp()
Dim array1() As Variant
Dim array2() As Variant
Dim last1 As String
Dim last2 As String
Dim C As Integer
Dim A As Integer
Dim high As Long
Dim low As Long
Dim x As Boolean
last2 = Sheets("Comparison").Range("B1000000").End(xlUp).Row
last1 = Sheets("Comparison").Range("BV10000").End(xlUp).Row
C = 0
A = 0
ReDim array1(C To last1, 3)
ReDim array2(A To last2, 5)
For C = 0 To last1
array1(C, 1) = Sheets("Comparison").Range("A" & C + 2).Value
array1(C, 2) = Sheets("Comparison").Range("D" & C + 2).Value
array1(C, 3) = Sheets("Comparison").Range("G" & C + 2).Value
high = array1(C, 1) + (1.15740740740741E-05 * 2) '2 seconds
low = array1(C, 1) + (1.15740740740741E-05 * 2) '2 seconds
x = False
For A = 0 To last2
array2(last2, 1) = Sheets("Comparison").Range("I" & A + 2).Value
array2(last2, 2) = Sheets("Comparison").Range("K" & A + 2).Value
array2(last2, 3) = Sheets("Comparison").Range("M" & A + 2).Value
array2(last2, 4) = Sheets("Comparison").Range("J" & A + 2).Value
array2(last2, 5) = Sheets("Comparison").Range("L" & A + 2).Value
If array1(C, 2) = array2(A, 2) And array1(C, 3) = array2(A, 3) And high >= array2(A, 1) And array2(A, 1) >= low Then
x = True
If x = True Then
Exit For
If x = True Then Sheets("Sheet2").Range("C100000").End(xlUp).Offset(1, 0).Value = array2(A, 4).Value And Sheets("Sheet2").Range("D100000").End(xlUp).Offset(1, 0).Value = array2(A, 5).Value
Else
Next A
Exit For
For C = 0 To last1
If x = True Then Sheets("Sheet2").Range("A100000").End(x1up).Offset(1, 0) = array1(C, 1).Value And Sheets("Sheet2").Range("B100000").End(x1up).Offset(1, 0) = array1(C, 3).Value
Next C
End Sub
答案 0 :(得分:0)
代码如下,未经测试。
arrayMatch
如果范围是连续的,则一次将值分配给一个数组是最好的方法。但是在你的情况下它们是分开的列,我设置3个数组来存储值。与array2相同的原因,一次读取值比循环更好。如果您需要更好的性能,则无需更改列顺序。请注意,分配这样的数组值,该数组将基于1。
我猜大约有500场比赛。您可以随意调整它。
由于没有人能预测实际会有多少场比赛,因此arrayMatch
可能不够大。这肯定是浪费时间和记忆,所以决定{{1}}的大小很重要。