正文開始前,先插播一條廣告:復(fù)制下面黃色內(nèi)容后打開手機(jī)淘寶即可查看!感謝各位的支持!
去老繭,脫死皮!番茄派足膜!,使用¥賺大了!拍下立即送卡通姓名貼?。屜阮A(yù)覽(長按復(fù)制整段文案,打開手機(jī)淘寶即可進(jìn)入活動內(nèi)容)
下面應(yīng)一位粉絲的要求,開始把我以前的一些學(xué)習(xí)資料整理了一下,然后分20期發(fā)給各位有需要的朋友,您也可以索取源文件,郵箱:546039945@qq.com!
031 刪除工作表中的空行
如果需要?jiǎng)h除工作表中所有的空行,可以使用下面的代碼。
Sub DelBlankRow()
DimrRow As Long
DimLRow As Long
Dimi As Long
rRow= Sheet1.UsedRange.Row
LRow= rRow Sheet1.UsedRange.Rows.Count - 1
Fori = LRow To rRow Step -1
If Application.WorksheetFunction.CountA(Rows(i))= 0 Then
Rows(i).Delete
End If
Next
End Sub
代碼解析:
DelBlankRow過程刪除工作表中已使用的區(qū)域的所有空行。
第5行代碼獲得工作表中已使用區(qū)域的首行行號,其中使用UsedRange屬性返回工作表中已使用的區(qū)域。
第6行代碼獲得工作表中已使用區(qū)域的最后一行行號。
第7行到第11行代碼從最大行數(shù)至最小行數(shù)循環(huán)判斷指定行是否為空行,若為空行則刪除該行。
注意此處一定要從最大行數(shù)至最小行數(shù)開始循環(huán)判斷,因?yàn)槿绻ぷ鞅碇写嬖趦尚屑皟尚幸陨系南噜徔招?,從最小行?shù)開始循環(huán)刪除的話,當(dāng)?shù)谝恍锌招斜粍h除后,被刪除行下面的一行會往上移位,而此時(shí)For...Next循環(huán)的計(jì)數(shù)器已經(jīng)加1,所以會出現(xiàn)漏刪除的現(xiàn)象。
其中第8、9行代碼使用工作表CountA函數(shù)判斷當(dāng)前行已使用單元格的數(shù)量,如果為零說明此行是空行則使用Delete刪除。
應(yīng)用于Range對象的Delete方法刪除對象,語法如下:
expression.Delete(Shift)
參數(shù)expression是必需的,返回一個(gè)Range對象。
參數(shù)Shift是可選的,指定刪除單元格時(shí)替補(bǔ)單元格的移位方式??蔀橐韵?/span> XlDeleteShiftDirection常量之一:xlShiftToLeft或xlShiftUp。如果省略該參數(shù),則Microsoft Excel將根據(jù)區(qū)域的圖形決定移位方式。
▲032 刪除工作表的重復(fù)行
在實(shí)際應(yīng)用中,可能需要?jiǎng)h除工作表中A列的重復(fù)內(nèi)容而只保留一行,那么可以借助工作表CountIf函數(shù)來完成,如下面的代碼所示。
Sub DeleteRow()
DimR As Integer
Dimi As Integer
WithSheet1
R = .[a65536].End(xlUp).Row
For i = R To 1 Step -1
If WorksheetFunction.CountIf(.Columns(1),.Cells(i,1)) > 1 Then
.Rows(i).Delete
End If
Next
EndWith
End Sub
代碼解析:
DeleteRow過程刪除工作表A列重復(fù)單元格所在的整行內(nèi)容,只保留一行。
第5行代碼取得工作表中A列的最后一個(gè)非空單元格的行號,關(guān)于Range對象的End屬性請參閱▲3 。
第6行到第10行代碼從最大行數(shù)至最小行數(shù)循環(huán)判斷A列單元格內(nèi)容是否重復(fù)并刪除重復(fù)單元格所在的整行。和▲32 一樣,此處For...Next循環(huán)也要從最大行數(shù)至最小行數(shù)開始循環(huán)判斷,否則可能會刪除不凈。其中第7行代碼使用工作表CountIf函數(shù)判斷單元格內(nèi)容是否重復(fù),如果重復(fù)則刪除該單元格所在的行。
▲033 定位刪除特定內(nèi)容所在的行
如果需要?jiǎng)h除工作表區(qū)域中特定內(nèi)容所在的行,可以使用定位的方法快速刪除,無需使用For...Next循環(huán)對單元格逐個(gè)進(jìn)行判斷。
示例代碼如下:
Sub SpecialDelete()
DimR As Integer
WithSheet1
R = .Range('a65536').End(xlUp).Row
.Range('a2:a' & R).Replace'Excel',““,2
.Columns(1).SpecialCells(4).EntireRow.Delete
EndWith
End Sub
代碼解析:
SpecialDelete過程刪除工作表A列單元格中顯示為“Excel”的行。
第5行代碼使用Replace方法將工作表A列中顯示為“Excel”的單元格內(nèi)容替換成空白。關(guān)于Replace方法請參閱▲6 。
第6行代碼使用SpecialCells方法定位到工作表A列中所有的空單元格,使用Range對象的EntireRow屬性返回其所在的整個(gè)行一次性刪除。關(guān)于SpecialCells方法請參閱▲4 。
▲034 判斷是否選中整行
通過當(dāng)前選擇的單元格區(qū)域的單元格數(shù)目與行數(shù)或列數(shù)相比較,判斷用戶是否選中了整行或整列,如下面的代碼所示。
Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)
If Target.Rows.Count= 1 Then
If Target.Columns.Count = 256 Then
MsgBox '您選中了整行,當(dāng)前行號' & Target.Row
End If
EndIf
End Sub
代碼解析:
工作表的SelectionChange事件,判斷用戶是否選中了工作表中一整行單元格區(qū)域。
第2行代碼中的Target.Rows.Count返回目標(biāo)區(qū)域的行數(shù),確定用戶當(dāng)前選擇區(qū)域的總行數(shù)是否為1。
第3行代碼中的Target.Columns.Count返回目標(biāo)區(qū)域的列數(shù),確定用戶當(dāng)前選擇區(qū)域總列數(shù)是否為256。
第4行代碼當(dāng)用戶選中一整行時(shí)顯示一個(gè)消息框,提示用戶當(dāng)前選擇的行號。
▲035 限制工作表的滾動區(qū)域
如果希望限制工作表中滾動的區(qū)域,可以通過設(shè)置WorkSheet對象的ScrollArea屬性來實(shí)現(xiàn)。ScrollArea屬性使用以A1樣式的區(qū)域引用形式(字符串類型)返回或設(shè)置工作表允許滾動的區(qū)域。當(dāng)設(shè)置了工作表滾動區(qū)域之后,用戶不能選定滾動區(qū)域之外的單元格,但仍然可以選定區(qū)域之外的其他對象(例如圖形、按鈕等),同時(shí)工作表的一些相應(yīng)功能可能被禁止(例如工作表全選、選中整行或整列等)。
在VBE中的工程管理窗口選擇相應(yīng)工作表對象,然后在其屬性窗口中設(shè)置ScrollArea屬性,即可限制工作表中滾動的區(qū)域。
但是Excel不會記憶該項(xiàng)設(shè)置,當(dāng)再次打開該工作簿時(shí),ScrollArea屬性將被重置,用戶必須重新設(shè)置ScrollArea屬性才能限制工作表中的滾動區(qū)域,解決方法是使用代碼在工作簿打開時(shí)對ScrollArea屬性進(jìn)行設(shè)置,如下面的代碼所示。
Private Sub Workbook_Open()
Sheet1.ScrollArea= 'B4:H12'
End Sub
代碼解析:
工作簿的Open事件,在打開該工作簿時(shí)設(shè)置Sheet1工作表的滾動區(qū)域?yàn)椤?/span>B4:H12”單元格區(qū)域。
如果需要取消滾動區(qū)域的限制,可以將ScrollArea屬性值設(shè)置為空,如下面的代碼所示。
Sheet1.ScrollArea =““
▲036 復(fù)制自動篩選后的數(shù)據(jù)區(qū)域
用戶在對數(shù)據(jù)列表進(jìn)行自動篩選后,往往希望將自動篩選的結(jié)果復(fù)制到其它地方。
這時(shí)可以通過獲取該列表區(qū)域中可見單元格的方法得到篩選結(jié)果的單元格區(qū)域,并復(fù)制到工作表Sheet2中,如下面的代碼所示。
Sub CopyFilter()
Sheet2.Cells.Clear
WithSheet1
If .FilterMode Then
.AutoFilter.Range.SpecialCells(12).CopySheet2.Cells(1,1)
End If
EndWith
End Sub
代碼解析:
CopyFilter過程將Sheet1表中的篩選結(jié)果復(fù)制到工作表Sheet2中。
第2行代碼清除Sheet2表中數(shù)據(jù)。
第4行代碼判斷Sheet1表是否處于自動篩選狀態(tài)。FilterMode屬性返回工作表是否處于篩選模式,如果指定工作表中包含已篩選序列且該序列中含有隱藏行,則該值為True。
第5行代碼通過AutoFilter對象的Range屬性返回工作表的自動篩選列表區(qū)域,再使用SpecialCells方法獲取該列表區(qū)域中可見單元格(SpecialCells方法請參閱▲4 ),得到篩選結(jié)果的單元格區(qū)域,然后使用Copy方法將結(jié)果區(qū)域復(fù)制到工作表Sheet2中,應(yīng)用于Range對象的Copy方法將單元格區(qū)域復(fù)制到指定的區(qū)域或剪貼板中,語法如下:
expression.Copy(Destination)
參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對象。
參數(shù)Destination是可選的,指定區(qū)域要復(fù)制到的目標(biāo)區(qū)域。如果省略該參數(shù),則將該區(qū)域復(fù)制到剪貼板中。
▲037 使用高級篩選獲得不重復(fù)記錄
在數(shù)據(jù)列表中,如果要將其中不重復(fù)的記錄復(fù)制到另一工作表中,則可以通過高級篩選功能實(shí)現(xiàn)。
示例代碼如下:
Sub Filter()
Sheet1.Range('A1').CurrentRegion.AdvancedFilter_
Action:=xlFilterCopy,Unique:=True,_
CopyToRange:=Sheet2.Range('A1')
End Sub
代碼解析:
Filter過程使用AdvancedFilter方法對單元格A1的當(dāng)前區(qū)域篩選不重復(fù)的記錄,并將篩選結(jié)果復(fù)制到工作表Sheet2中。應(yīng)用于Range集合的AdvancedFilter方法語法如下:
AdvancedFilter(Action,CriteriaRange,CopyToRange,Unique)
參數(shù)Action是必需的,可以為表格所列的 XlFilterAction常量之一。
參數(shù)CriteriaRange指定高級篩選操作的條件區(qū)域,缺省時(shí)表示沒有條件限制。
參數(shù)CopyToRange表示指定被復(fù)制行的目標(biāo)區(qū)域,僅當(dāng)Action為xlFilterCopy時(shí)有效,否則忽略本參數(shù)。
參數(shù)Unique指示是否選擇不重復(fù)的記錄,如果其值為True,則重復(fù)出現(xiàn)的記錄僅保留一條;如果其值為 False(默認(rèn)值),則篩選出所有符合條件的記錄。
聯(lián)系客服