Sub 核對單對多并洗掉重復()
a = Sheets("sheet1").[a1].CurrentRegion.Rows.Count
b = Sheets("sheet2").[a1].CurrentRegion.Rows.Count
For i = 2 To a
For j = 2 To b
If (Sheet1.Cells(i, 2) = Sheet2.Cells(j, 2)) Then
Sheet1.Cells(i, 4) = Sheet2.Cells(j, 4)
Sheet2.Cells(j, 2).Select
Selection.EntireRow.Delete
Exit For
End If
Next j
Next i
End Sub
uj5u.com熱心網友回復:
不知道我的答案里觸到什么敏感詞了,截圖發上來吧。
uj5u.com熱心網友回復:
您真是好了,我看懂了,我原來有一段陳述句,是可以正常執行的。是這樣的:Sub 洗掉相同()
a = Sheets("sheet1").[a1].CurrentRegion.Rows.Count
For i = 2 To a
j = i + 6
4: If Application.WorksheetFunction.CountIf([B1:B2500], Cells(i, 2)) > 6 Then
Cells(j, 1).Select
Selection.EntireRow.Delete
a = a - 1
If Application.WorksheetFunction.CountIf([B1:B2500], Cells(i, 2)) > 6 Then
GoTo 4
End If
End If
Next i
End Sub
這個可以正常運行,我沒有用變數,直接用區域[B1:B2500),我的資料不會超出2500行。
我現在把區域換成變數,就不行了。我一般都是用標記,然后手工處理的,這個嘛。。。。。。。其實能不能實作無所謂了,就是研究一下了。
不過還是真心感謝X-I-N,以后說不定還有問題請教。另外一個問題完美解決了。
我沒有學過任何vb,我上學的時候就學過一點匯編,早忘光了,我的宏全是在網上找類似的,努力看懂,然后一點點改出來的。有時候用錄制的辦法,搞出來,然后改,測驗報錯真的很痛苦,這一句我折騰了幾天了。
我再折騰一小會兒。
uj5u.com熱心網友回復:
我折騰好了!!!!Sub 核對單對多并洗掉重復()
a = Sheets("sheet1").[a1].CurrentRegion.Rows.Count
b = Sheets("sheet2").[a1].CurrentRegion.Rows.Count
For i = 2 To a
For j = 2 To b
If (Sheet1.Cells(i, 2) = Sheet2.Cells(j, 2)) Then
Sheet1.Cells(i, 4) = Sheet2.Cells(j, 4)
Sheet2.Cells(j, 2).EntireRow.Delete
End If
Next j
Next i
End Sub
這樣就可以了,原來問題出在使用IF的時候,.Cells(i, 2)、Cells(j, 2)、Cells(i, 4)-----------所有在if回圈中的變數單元格全部都是Selection,所以報錯了。我直接閉著眼改成Sheet2.Cells(j, 2).EntireRow.Delete,竟然就可以了。
uj5u.com熱心網友回復:
居然還是在回圈里對回圈集合進行操作……有點無語你可以試一下這個洗掉偶數行的錯誤示例看看實際效果。
Sub aa()
For i = 1 To 20
Cells(i, 1) = i
Next i
For i = 1 To UsedRange.Rows.Count
If i Mod 2 = 0 Then Rows(i).Delete
Next i
End Sub
uj5u.com熱心網友回復:
太感謝了,我今天才無意中發現了我的代碼是有遺漏的。不是我自己手工檢查一下,還真發現不了。意思我終于明白了,還是指標的問題。uj5u.com熱心網友回復:
你怎么可以發圖片的?好厲害轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/18455.html
標籤:VBA
上一篇:VB6使用wininet.dll的方法HttpOpenRequestA回傳0,錯誤代碼為87怎么辦?
下一篇:VB文本框如何禁止粘貼特殊字符?
