2012-11-30 114 views
0

我正在尋找搜索幾個數字在一起(國家彩票);我必須每次看5張照片,並且有90個數字。 可能性是1.2 1.3 1.4 ... 89.90,我有4005種組合。 algorythm運作良好,但搜索的時間是絕對不可能管理的。有沒有可能加快研究的速度?在vba excel中搜索的數字

對於磁懸浮= 2向4006

primo = Foglio3.Cells(amb, 1) 
    secondo = Foglio3.Cells(amb, 2) 

    ritardo = 0 

    For cont = 8618 To 2 Step -1 

     est1 = Foglio2.Cells(cont, 2) 
     est2 = Foglio2.Cells(cont, 3) 
     est3 = Foglio2.Cells(cont, 4) 
     est4 = Foglio2.Cells(cont, 5) 
     est5 = Foglio2.Cells(cont, 6) 

     If (primo = est1) Or (primo = est2) Or (primo = est3) Or (primo = est4) Or (primo = est5) Then 
      If (secondo = est1) Or (secondo = est2) Or (secondo = est3) Or (secondo = est4) Or (secondo = est5) Then 
       Foglio3.Cells(amb, 3) = ritardo  '3 = nazionale 
       Exit For 
      End If 

     End If 

     ritardo = ritardo + 1 

    Next cont 

Next amb 

回答

1

第一步是停止使用每個環中的片材和VBA。因此將數據存儲在數組中,然後遍歷內存數組。如果需要,請更改變體以將表格中的數據類型填入表格中。注意:Foglio2和Foglio3的範圍參考將需要更改以適應您的數據集。

Dim foglio2() As Variant, foglio3() As Variant 
Dim i As Double 

Dim primo As Variant, secondo As Variant 
Dim est1 As Variant, est As Variant, est3 As Variant, est4 As Variant, est5 As Variant 

Dim resultArray() As Variant 

foglio3 = Foglio3.Range("A2").CurrentRegion 
foglio2 = Foglio2.Range("A2").CurrentRegion 

For i = 2 To UBound(foglio2) ' maybe change to 4006? 

    primo = foglio2(1, 1) 
    secondo = foglio2(1, 2) 

    ' change J to 8616? 
    For j = UBound(foglio3) To 2 Step -1 

     est1 = foglio3(j, 2) 
     est2 = foglio3(j, 3) 
     est3 = foglio3(j, 4) 
     est4 = foglio3(j, 5) 
     est5 = foglio3(j, 6) 

     ReDim Preserve resultArray(i) 
     If (primo = est1) Or (primo = est2) Or (primo = est3) Or (primo = est4) Or (primo = est5) Then 
      If (secondo = est1) Or (secondo = est2) Or (secondo = est3) Or (secondo = est4) Or (secondo = est5) Then 

       resultArray(i) = ritardo  '3 = nazionale 
       Exit For 
      End If 

     Else 
      resultArray(i) = vbNullString 
     End If 

     ritardo = ritardo + 1 


    Next j 

Next i 

Foglio3.Cells(2, 3).Resize(UBound(resultArray), 1) = resultArray