2017-06-19 26 views
0

在我的數據中有超過一千個不同的六位數字,這些數字在沒有特定模式下重複出現。我需要找到列A中存在的所有六位數字代碼以及每個數字。例如123456,然後在列B中爲列A中的每個具有123456的行查找彙總值。我的代碼不是非常有效,但如果我只運行10行,則運行時不是問題。但是,在真實的數據表中有80 000行,我的代碼需要很長時間。有人可以幫我編輯我的代碼,但刪除循環內的某些循環或一些停止條件。我是VBA新手,無法在有限的時間內自己做。刪除循環使我的VBA宏能夠在更多數據上運行

Sub Test2() 
    Dim summa As Long 
    Dim x As Long 
    Dim condition As Boolean 
    Dim lRows As Long 
    Dim k1 As Integer 
    Dim i As Long 

    x = 1 
    Worksheets("Sheet1").Activate 

    For i = 100000 To 999999 
    k1 = 1 
    lRows = 10 
    condition = False 

    While k1 <= lRows 
     If Cells(k1, "A").Value = i Then 
     condition = True 
     End If  
     k1 = k1 + 1 
    Wend 

    If condition = True Then 
     Cells(x, "F").Value = Application.SumIf(Range("A:A"), CStr(i), Range("B:B")) 
     Cells(x, "E").Value = i 
     x = x + 1 
    End If 
    Next i 

    MsgBox "Done" 
End Sub 
+9

「*我是VBA的新手,在有限的時間內無法自己做。*」所以我們的時間也有限。沒有人會因爲你截止日期而爲你做所有的工作。我們不知道你的代碼做了什麼(你沒有告訴)以及它應該做什麼。你至少應該指出**是你的問題。另請閱讀[問]。 –

+1

基本上,列E需要在列A中具有所有唯一值,並且列F需要具有如此SumIF中指定的列B的總和。是否有任何理由不能將列A複製粘貼到E中,使用功能區中的「刪除重複項」並在列F中手動輸入SumIF函數? /爲什麼你需要VBA? –

+3

使用數據透視表? – 99moorem

回答

1

您不需要VBA來完成此任務。按着這些次序。

  1. 在原始數據表的副本中插入空白欄C.
  2. 在C2中插入一個SUMIF公式,如=SUMIF(A:A, A2, B:B),然後一直向下複製。
  3. 現在所有項目123456在列C中的總數將相同
  4. 複製C列和粘貼值(用公式替換它們的值)。
  5. 刪除列B.
  6. 刪除重複項。