小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VBA簡單入門09:End屬性獲取最后的單元格信息

 weima938 2018-06-15

1、End屬性是單元格對象Range的屬性,它返回工作表中(行列)的最后一個非空單元格,并常常用來構(gòu)建動態(tài)的單元格數(shù)據(jù)范圍。

如,工作表中只有A1:C13是數(shù)據(jù)區(qū)域。此時該工作表的最后一個非空單元格的相關信息可以用End屬性來獲取。

VBA簡單入門09:End屬性獲取最后的單元格信息

A列最后一個非空單元格地址:返回 : "$A$13"

a = Range("a1048576").End(xlUp).Address

VBA簡單入門09:End屬性獲取最后的單元格信息

Range("a1048576")表示單元格 A1048576,而End是屬于Range單元格對象的屬性。

可以說白一點:Range("a1048576").End(xlUp)就是以單元格 A1048576 為基點,從 【A1048575 開始】 (A1048576即使非空也不在查找范圍內(nèi))在同一列(A列)往上查找,找到第一個非空單元格就停止,并返回該單元格。所以上面的代碼,返回的是A13單元格。

如將代碼改為:Range("a20").End(xlUp).Address,返回同樣結(jié)果。

VBA簡單入門09:End屬性獲取最后的單元格信息

原因只不過是,一個從A1048575開始,一個從A19開始,雖然基點不同,但往上查找到的第一個非空單元格都是A13。

即使單元格A20非空,也不算數(shù)。如下:

VBA簡單入門09:End屬性獲取最后的單元格信息


2、既然可以往上查找,那就同樣可以往下、往左、往右查找。

在寫代碼的時候,就有提示:

VBA簡單入門09:End屬性獲取最后的單元格信息

xlup上; xldown下; xltoleft左; xltoright右

它們的相同點是,作為基點的單元格都不算。


在數(shù)據(jù)比較規(guī)范的時候,無論是xlup還是xldown,都能得出同樣的結(jié)果。

VBA簡單入門09:End屬性獲取最后的單元格信息

假如,A16單元格非空,那么上圖兩句代碼返回的結(jié)果將不一樣。

VBA簡單入門09:End屬性獲取最后的單元格信息

xlup:向上找,找到第一個非空單元格就停止。

xldown:向下找,遇到空單元格就停止。

xltoleft和xltoright同理。


下列代碼返回規(guī)范數(shù)據(jù)情況下(只A1:C13有數(shù)據(jù))當前活動工作表的數(shù)據(jù)范圍的相關信息。

VBA簡單入門09:End屬性獲取最后的單元格信息

假如,當前的數(shù)據(jù)表格需每天更新數(shù)據(jù)(添加行),該動態(tài)單元格范圍一般可以這樣表示:

Range("a1:c" & 數(shù)值變量) 或 Range("a1",單元格變量),如下面代碼都可以表示單元格A1:C13

行數(shù) = Range("a1048576").End(xlUp).Row

Range("a1:c" & 行數(shù)).Select

Range("a1", Range("c1048576").End(xlUp)).Select

當數(shù)據(jù)自動增加的時候,單元格范圍會自動增加。如新增3行數(shù)據(jù)。請看gif演示。

VBA簡單入門09:End屬性獲取最后的單元格信息


4、Excel版本問題造成的錯誤。

Excel03版只有65536行,Excel07版后有1048576行,所以Range("a1048576")在03版中會出錯。

所以通用的寫法是:Cells(Rows.Count, 列)或Cells(行, Columns.Count)來代替Rang對象。

下圖中,Rows.Count在03版是65536,在07版或以上是1048576,再也不擔心版本問題而出錯。

VBA簡單入門09:End屬性獲取最后的單元格信息


【小練習】提取唯一值(去重復)

VBA簡單入門09:End屬性獲取最后的單元格信息

要求:將A列的英雄姓名去除重復值,提取唯一值到D列。

此題目可以用菜單欄的刪除重復值操作(或字典)來實現(xiàn)更簡單,但這里使用的是循環(huán)的方法。

Sub A()

Dim R As Long

Dim R1 As Long

Dim B As Boolean

Dim k As Long

R = Cells(Rows.Count, 1).End(xlUp).Row 'A列最后非空行行號

Range("d2:d10000") = "" '先將D列數(shù)據(jù)清空

[d2] = [a2] '第一個數(shù)據(jù)必然是唯一的,放入D2單元格

k = 2

For i = 3 To R '遍歷英雄姓名(第2個數(shù)據(jù)起)

B = False '此值改變用來標記是否有重復

R1 = Cells(Rows.Count, 4).End(xlUp).Row 'D列最后非空行行號

'............................................................................................................................................

'//注意R1數(shù)值的變化,隨著提取的唯一姓名個數(shù)增加而增加

For j = 2 To R1 'A列姓名每一個都遍歷D列的所有英雄姓名,查看是否在D列存在(重復)

If Cells(i, 1) = Cells(j, 4) Then '如果A列姓名在D列能找到,表示重復

B = True '布爾變量為TRUE表示重復

Exit For '確定重復后退出循環(huán)

End If

Next

'.............................................................................................................................................

'//判斷是否有重復,并輸出數(shù)據(jù)

If B = False Then '判斷B的值,如False,則是唯一值

k = k + 1 '計數(shù)

Cells(k, 4) = Cells(i, 1) '數(shù)據(jù)放到D列

End If

Next

End Sub

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多