2015-06-29 37 views
0

我目前正在嘗試編寫一個短循環來將接收到的項目列表壓縮爲簡明的逐項報告。我掃描我收到的每件物品的條形碼,並將其放入A欄,如果數量超過1則進入B欄。試圖在VBA中編寫一個循環

這是我的思考過程,以刪除列中所有項目的重複項A和結合它們的總數在B:

  • 計數在列A線的數目,設定爲「N」

  • 登記塔B達到「N」的所有單元,並設置空白細胞1

  • 將A1與A2至AN比較,如果相同的組合B值並刪除該行(如果A1和A2匹配,並且兩個B單元格值都是1,則A1保持不變,B1現在具有值2,並且第二行被刪除。)

  • 對AN的所有A值與AN相比,重複循環。

我知道每行刪除後N需要減少,而我對VBA來說很新,所以我總是在編寫循環時遇到困難。

任何建議在網頁上看或我可以在我的代碼中使用簡單的結構將不勝感激。

編輯:試圖把表1向表2

表1表----------------------------- 2

Column A  Column B | Column A  Column B 
11233      | 11233   4 
11233   2   | 9987   7 
9987      | 7452   1 
11233      | 
9987   6   | 
7452      | 
+0

透視表是行不通的? – Hambone

+1

數據透視表可能是一種矯枉過正。第2步(將空白更改爲1)將始終需要。完成之後 - 按列A排序,然後選擇數據範圍內的任何單元格,並使用「小計」 - 它會給你提供數據的簡潔明瞭的視圖。 – Juliusz

+0

我知道如何自己清理數據,但我試圖設置一個宏,以便沒有經驗或時間來解決這個問題的人們可以在掃描收到的貨物後點擊一個宏,並且擁有一張乾淨的紙張數據的。 – Rob

回答

1
Sub Summator() 
ActiveSheet.Columns("A:B").Sort Key1:=ActiveSheet.Range("A2"), Order1:=xlAscending, Header:=xlGuess 
lastRow = Range("A65000").End(xlUp).Row 
For i = 1 To lastRow 
    If Cells(i, 2) = "" Then Cells(i, 2) = 1 
Next i 
For i = lastRow To 2 Step -1 
    If Cells(i, 1) = Cells(i - 1, 1) Then 
     Cells(i - 1, 2) = Cells(i - 1, 2) + Cells(i, 2) 
     Cells(i, 2).EntireRow.Delete 
    End If 
Next i 
End Sub 
+0

似乎很好。謝謝您的幫助!我可以問爲什麼在代碼中爲了將空白單元格變成1而在2個不同'for'循環中有2行? – Rob

+0

好問題。答案是我第一次只在第二次循環中使用它,但邏輯沒有解決,所以我添加了一個循環,並且從未拿出第二個循環。這是沒有理由的。我將編輯。 –