|
本帖最后由 hzruziniu 于 2021-6-30 12:46 编辑
SpecialCells 方法的xlCellTypeConstants函数属性,我的VBA笔记:
SpecialCells 方法
参阅应用于示例特性返回一个 Range 对象,该对象代表与指定类型及值相匹配的所有单元格。Range 对象。
expression.SpecialCells(Type, Value)
expression 必需。该表达式返回“应用于”列表中的一个对象。
Type XlCellType 类型,必需。要包含的单元格。
1、问:xlCellTypeConstants, 23是什么意思?
‘23是选择一个区域,编辑——定位——定位条件——常量,Range.SpecialCells 方法可以返回一个 Range 对象,该对象代表与指定类型和值匹配的所有单元格。其语法如下:
表达式.SpecialCells(Type,Value)
其Type参数的可选XlCellType常量及对应值如下表:
xlCellTypeAllFormatConditions 任意格式单元格 -4172
xlCellTypeAllValidation 含有验证条件的单元格 -4174
xlCellTypeBlanks 空单元格 4
xlCellTypeComments 含有注释的单元格 -4144
xlCellTypeConstants 含有常量的单元格 2
xlCellTypeFormulas 含有公式的单元格 -4123
xlCellTypeLastCell 使用区域中最后的单元格 11
xlCellTypeSameFormatConditions 含有相同格式的单元格 -4173
xlCellTypeSameValidation 含有相同验证条件的单元格 -4175
xlCellTypeVisible 所有可见单元格 12
xlCellTypeConstants, 23定位常量
xlCellTypeConstants, 20定位常量错误值及逻辑值
当Type参数为 xlCellTypeConstants 或 xlCellTypeFormulas时,Value参数有4种XlSpecialCellsValue 常量可选,见下表:
XlSpecialCellsValue 常量 值 说明
xlErrors 16 错误值
xlLogical 4 逻辑值
xlNumbers 1 数字
xlTextValues 2 文本
2、SpecialCells还有以下类型的用法:
[A:A].SpecialCells(3).Select 含有公式的
[A:A].SpecialCells(5).Select 有空即止
[A:A].SpecialCells(8).Select 除了第一行,其他的全选
[A:A].SpecialCells(9).Select 被公式引用的单元格
[A:A].SpecialCells(10).Select 含有验证条件的单元格 -4174
[A:A].SpecialCells(12).Select 可见单元格
[A:A].SpecialCells(13).Select 全部选中了
3、例题
例1:只要定位常量错误值及逻辑值(即16+4=20),则采用如下代码:如下SpecialCells(xlCellTypeConstants, 23)语句中的23=16+4+1+2,即表示定位的常量包含4种类型的单元格:错误值+逻辑值+数字+文本
Sub test1()
Range("a:a").SpecialCells(xlCellTypeConstants, 20).Select
End Sub
例2:'对当前工作表使用区域只清除内容保留原格式
Sub Macro2() '对当前工作表使用区域
On Error Resume Next
ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 23).ClearContents
End Sub
例3:'对当前工作表使用区域只清除内容保留原格式
'如下SpecialCells(xlCellTypeConstants, 23)语句中的23=16+4+1+2,即表示定位的常量包含4种类型的单元格:错误值+逻辑值+数字+文本
Sub Macro2() '对当前工作表使用区域
On Error Resume Next
ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 23).ClearContents
End Sub
例4:'隐藏空行
Sub 隐藏空行()
Application.ScreenUpdating = False
Columns(1).UnMerge
‘Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
Columns(1).SpecialCells(4).EntireRow.Hidden = True
Application.ScreenUpdating = True
End Sub
‘第4句的xlCellTypeBlanks可以换作第5句的对应值4代替
xlCellTypeBlanks 空单元格 4
例5:删除空行
Sub 删除空行()
Range("C2:C94").SpecialCells(4).EntireRow.Delete
End Sub
例6:'对向下插入多列只复制选中行的公式和格式
你的表格只清除常量中的文本值和数字,需保留格式和公式,所以需要分二次清除,其函数的对应值是1数字值和2文本值,另外在如果向下填充时选中行单元格为空行,CellTypeConstants代码函数因没有对应值会出错,所以需加上蔽错语名On Error Resume Next
Private Sub CommandButton3_Click()
Dim k As Range, i%
Application.EnableEvents = False
On Error Resume Next
i = ActiveCell.Row '选中的行号
Cells(i + 1, 1).Resize(3, 1).EntireRow.Insert '在选中行i的下方插入n行
Range(Cells(i, 1), Cells(i + 3, 33)).FillDown '向下填充公式
Cells(i + 1, 1).Resize(3, 33).SpecialCells(xlCellTypeConstants, 1) = "" '清除公式以外的常量
Cells(i + 1, 1).Resize(3, 33).SpecialCells(xlCellTypeConstants, 2) = "" '清除公式以外的常量
End Sub
最后:SpecialCells 方法的好处是一次性定位到所有单元格,速度远比循环快,特别是隐藏空行用循环方法与SpecialCells定位方法其速度相差悬殊,你可以试一下,你的表当然也可以用循环方法删去除公式以外的其余单元格,但其速度要慢得多。
|
评分
-
1
查看全部评分
-
|