VBA學習 Row和Rows的理解和體會


本人一直在自學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日星期日。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM