我正在尋找一種算法,我沒有VBA知識來編寫腳本。所以我卡住了。這不是通過努力嘗試,因爲我已經放棄了(加上,這一點的代碼是我的更大的VBA代碼的最後剩餘部分)我只是缺乏知識/經驗/技能...VBA - 搜索並刪除重複項
基本上,我有一個Excel文件。在這個文件中是一張表單「sheet1」。 Sheet1包含許多行數據。 sheet1中包含的行數可以從1到n不等。有時,我可能有50個,而其他時間我可能有30個,等等。這本書的佈局是一致的,即我在A列中有代碼來標識我的數據庫中的產品。
我想這樣做是:
掃描片空行(由於生成的工作簿的路上,我有時有空白行),並刪除它們。這些空白行有時在數據行之間有數據,而在其他時間可能會在數據表末尾。
2.刪除空白行後,找到最後使用的行。將它存儲到一個變量中。我已經發現這段代碼可用於這樣做:
mylastrow = myBook.Sheets("Results").Cells.Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
3.從(2)中,我想在A中的產品代碼(x,其中x = mylastrow確定的行開始)並找到它的任何其他事件(在A列中)。如果找到任何內容,請刪除與其相對應的整行。重要的是,這個循環必須相反。例如,假設mylastrow = 40
,循環將需要從A40開始,並且在下一次迭代時執行A39(如果某行已被刪除,則爲38)。這是因爲對於任何產品編號,行中的相應數據都包含更多數據(由於生成工作表的方式)。基本上最接近最後一行的條目是最近的條目。
希望我能夠正確解釋原位。但如果不是,你願意接受我的挑戰(我的負擔?),我將非常感激。
QF
謝謝 - 我會給這個*另一個*去。 – 2012-04-30 14:09:43
我沒有它......我會在這裏粘貼我的代碼,但我沒有空間。有效地,我有一個For next循環進行。在其中,我將當前產品代碼分配給一個變量,然後開始另一個與Next之前的循環相同的循環,只有這一次我循環訪問列中其他代碼的值並刪除所有匹配。這兩個循環迭代了我現在唯一的麻煩是循環刪除了幾乎所有的代碼,但是三個(儘管存在更多的唯一值)。卡住... – 2012-04-30 15:57:37
這可能是因爲您用來迭代的計數器沒有從行刪除中正確更新。這就是爲什麼我建議字典的方法。在刪除/插入行時,「Do While」通常比「For」更好,因爲您可能需要增加/減少兩次才能獲得正確的偏移量。我的猜測是,當你返回到外部的'For'時,你的增量變量將會到達下一個行,在這一點上將是空的(由於刪除),並正確地更新該變量,你需要使用'While'因爲'For'總是將增量var重置爲下一步。 – Zairja 2012-04-30 17:46:03