学海荡舟手机网
导航

主页 > 电子设备技术 > 维修入门基础 > > 详细内容

wps单元格怎么表示?

本课时讲述关于已用区域UsedRange与当前区域CurrentRegion  
20.1 UsedRange
Sheet.UsedRange表示工作表中已用区域,即用户已经使用过的单元格区域。
例如工作表“Sheet1”中A1:V2存放了数据,其它区域一直保持空白,那么A1:V2区域是该表的已使用区。如果A1:V2之外的B10也录入一个新数据,那么该表的已用区域即为A1:V10
一个工作表只有一个已用区域,它将工作表中使用过的最小行行号与最小列列标定义为已用区域的左上角单元格地址,再将工作表中使用过的最大行行号与最五列列标定义为已用区域的右下角单元格地址,最终组合并已矩形的已用区域。也可以换一种说法:可以覆盖已所有已经使用过的单元格的最小矩形区域,即为工作表的已用区域。
可以使用图20.1来演示已用区域范围。其中C2:E2B4:B7区域已经使用,那么既可以同时覆盖这两个区域的最小矩形区域B2:E7即为当前表的已用区域。

 


 

21.1 工作表的已用区域UsedRange


在使用UsedRange时需要注意一个重点:UsedRange判断单元格是否“已用”,不按单元格是否“非空”做为标准,而是“非空且无特殊格式”。如果单元格空白,但对单元格设置了看不见的加粗、倾斜、下划线之类格式,那么该单元格也属于已用区域UsedRange之一。例如在图21.1中,单击F7单元格,再按下快捷键【l+I】,那么该表已用区域即相对成为B2:F7
利用以下语句可以取得工作表的已用区域地址:
MsgBox ActiveSheet.UsedRange.Address(0, 0)
提示:如果工作表中所有单元格都未曾使用,那么UsedRange代表A1.
常与UsedRange搭配使用的函数是IsEmpty,它用于判断变量是否初始化。将IsEmptyUsedRange与合用,通常是判断工作表是否空表。
20.2 CurrentRegion
Range.CurrentRegion表示当前区域。当前区域是以空行及空列的组合边界,且包括Range对象的矩形区域。
UsedRange相比较,它们的不同点见20-1所示。
20-1 已用区域与当前区域之比较

比较对象
比较项目
 
UsedRange
 
CurrentRegion
 
判断标准
 
非空及是否有格式
 
非空及是否与Range之间存在空白行、空白列
 
每个工作表中拥有的数据
 
1
 
多个
 
上层对象
 
Worksheet
 
Range
 
由此可见,每个单元格都拥有自己的CurrentRegion,如果某单元格非空且与指定对象Range之间不存在空行或者空列间隔,那么它就属于该RangeCurrentRegion成员。
例如在图20.1中,工作表中的已用区域和单元格A1的当前区域获取方法如下:
_______________________________________________________________________

Sub UsedRangeCurrentRegion()
MsgBox "UsedRange:" & ActiveSheet.UsedRange.Address & Chr(10) _
& "CurrentRegion:" & Range("a1").CurrentRegion.Address, 64, "提示"
End Sub
___________________________________________________________

其中Chr(10)表示中10的字符,即相当于回键符,可以将字符串换行。

 

20.2 成绩表


 

20.3 UsedRangeCurrentRegion

但是在大多数情况下,Sheet.UsedRangeRange.CurrentRegion是一致的,它们代表完全相同的区域。即工作表UsedRange中任意两个已用元格之间都不存在空行与空列间隔时,UsedRangeCurrentRegion将重叠。
20.3 UsedRangeCurrentRegion应用---工作表减肥

Excel制表时间较长的用户可能会有这种体验:工作表中数据不多,但是工作表占用空间很大,这就是所谓的虚胖。它的原因之一是UsedRange中存在着很多带格式的空单元格,利用VBA清除这部分区域就可以对文件进行减肥。
例如在新工作表A1:H20区域录入任意字符,并按下快捷键【Ctrl+B】和【Ctrl+I】对所有数据加粗并倾斜显示,然后选择G:H列,按下键盘上的【Delete】键清除其数据;同样方式清除第1120行的数据。此时被清除数据有区域,虽然空白,却保留了格式,而使工作表“虚胖”。
解决办法下:
______________________________________________________________

Sub 工作表减肥()
MsgBox "减肥前:" & ActiveSheet.UsedRange.Address '获取减肥前的已用区域地址
'清除多余的列
Dim Col_Count As Long
With ActiveSheet.UsedRange '使用With简化对象引用
For Col_Count = .Columns.Count To 1 Step -1 '从已用区域最后一列开始,直到第一列
'如果循环中某单元格整列皆为空白
'Resize方法的作用是使用For只在已用区域的第一行循环,忽略其它行,提升代码效率)
IF WorksheetFunction.CountA(.Item(1).Resize(1, .Columns.Count)(Col_Count).EntireColumn) = 0 Then
'将该列删除
.Item(1).Resize(1, .Columns.Count)(Col_Count).EntireColumn.Delete
Else '否则
Exit For '只要该列有一个数据则退出循环,避免删除必要的空列
End IF
Next
End With
'清除多余的行
Dim Row_Count As Long
With ActiveSheet.UsedRange '使用With简化对象引用
For Row_Count = .Rows.Count To 1 Step -1 '从已用区域最后一行开始,直到第一行
'如果循环中某单元格整行皆为空白
'Resize方法的作用是使用For只在已用区域的第一列循环,忽略其它列,提升代码效率)
IF WorksheetFunction.CountA(.Item(1).Resize(.Rows.Count, 1)(Row_Count).EntireRow) = 0 Then
'将该列删除
.Item(1).Resize(.Rows.Count, 1)(Row_Count).EntireRow.Delete
Else '否则
Exit For '只要该列有一个数据则退出循环,避免删除必要的空列
End IF
Next
End With
endd:
MsgBox "减肥后:" & ActiveSheet.UsedRange.Address '报告减肥后的已用区域地址
End Sub
________________________________________________________________

执行以上代码,将弹出两次对话框,表示减肥前后的已用区域地址,分别为:


 

20.4 减肥前已用区域地址

20.5 减肥后已用区域地址

本过程的思路是:从已用区域最后一列向前逐列检查,如果某列为空白,则整列删除;然后从已用区域最后一行向上逐行检查,如果某行为空白,则整行删除。

 


相关文章