本人一直在自學VBA,最近因為工作需要,設計了一份模板。其中有一小段的功能是實現某列數據的查重,並把重復數據所在行的整行刪除,並保持此行下方所有行向上移動一行。實現這個功能的代碼很簡單,也很好理解。只是在測試的過程中發現了一個小小的問題,是關於Row和Rows這兩個對象的。
我們知道Row和Rows都是指代Excel中“行”這個對象,不同的是Row是指代某行、單個的行,而Rows呢?則是指代行的集合。這就像Worksheet和Worksheets一樣,VBA中像這樣的對象有很多。
而上面闡述的問題呢,就是和Row和Rows相關的。我先貼出實現上面功能的小段代碼:
Sub test()
Dim a, b As Integer
a = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For b = a To 3 Step -1
If Application.WorksheetFunction.CountIf(Range("A3:A" & b), Range("A" & b)) > 1 Then
Rows(b).Delete shift:=xlUp
End If
Next b
End Sub
我剛開始時,a = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row這里寫的是a = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Rows.count。然后測試后發現a=1,我有想了下,才發現是Rows.count的問題。
Range(“A2”).Row或者cells(2,1).Row指的是某個單元格在第幾行;而Rows.Count更多的是運用在某個區域中有多少行,比如:Range(“A1:A10”).Rows.Count,這里就是計算該區域行數為10。
這就是Rows和Row在運用中的區別之一了,也是我代碼出現問題的核心原因了。所以大家在學習VBA中或者寫VBA代碼時需要特別關注喲,小小的細節常常決定了事物的發展和走向。
以上,2018年12月9日星期日。