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