使用SpecialCells方法 SpecialCells方法用于查找指定类型的值,其语法为SpecialCells(Type,Value),有两种主要的使用方式: (1) 若参数Type仅考虑常量,则在查找时会忽略和覆盖由公式生成的任何数据,如示例代码08所示。 (2) 若参数Type仅考虑由公式生成的数据,则在查找时会忽略和覆盖任何常量数据,如示例代码09所示。 如果参数Type是xlCellTypeConstants或者是xlCellTypeFormulas,则Value参数可使用常量决定哪种类型的单元格将被包含在结果中,这些常量值能组合而返回多个类型,其缺省设置是选择所有的常量或公式,而不管是何类型,可使用下面四个可选的常量: 1) xlTextValues(包含文本); 2) xlNumbers(包含数字); 3) xlErrors(包含错误值); 4) xlLogical(包含逻辑值)
自已在工作表输入一些含有数值和公式的数据,隐藏或不隐藏最后一行或公式所在的行,先体验下面的两段示例代码。 [示例代码08] '当最后一行为公式或隐藏了最后行时,会忽略,即认为倒数第二行为最后一行 Sub NextConstantRowFunction() Range("A" & LastConstantRow(True, True, True, True) + 1).Select End Sub '- - - - - - - - - - - - - - - - - - - - - - - - Public Function LastConstantRow(Optional IncludeText As Boolean, _ Optional IncludeNumbers As Boolean, _ Optional IncludeErrors As Boolean, _ Optional IncludeLogicals As Boolean) As Long Dim Text As Long, Numbers As Long, Errors As Long Dim Logical As Long, AllTypes As Long If IncludeText Then Text = xlTextValues Else Text = 0 If IncludeNumbers Then Numbers = xlNumbers Else Numbers = 0 If IncludeErrors Then Errors = xlErrors Else Errors = 0 If IncludeLogicals Then Logical = xlLogical Else Logical = 0 AllTypes = Text + Numbers + Errors + Logical On Error GoTo Finish LastConstantRow = Split(Cells.SpecialCells(xlCellTypeConstants, AllTypes).Address, "$") _ (UBound(Split(Cells.SpecialCells(xlCellTypeConstants, AllTypes).Address, "$"))) Exit Function Finish: MsgBox "没有发现数据!" End Function
[示例代码09] '查找含有公式的单元格所在的行,忽略该行以后的常量和隐藏的行 Sub NextFormulaRowFunction() Range("A" & LastFormulaRow(True, True, True, True) + 1).Select End Sub '- - - - - - - - - - - - - - - - - - - Public Function LastFormulaRow(Optional IncludeText As Boolean, _ Optional IncludeNumbers As Boolean, _ Optional IncludeErrors As Boolean, _ Optional IncludeLogicals As Boolean) As Long Dim Text As Long, Numbers As Long, Errors As Long Dim Logical As Long, AllTypes As Long If IncludeText Then Text = xlTextValues Else Text = 0 If IncludeNumbers Then Numbers = xlNumbers Else Numbers = 0 If IncludeErrors Then Errors = xlErrors Else Errors = 0 If IncludeLogicals Then Logical = xlLogical Else Logical = 0 AllTypes = Text + Numbers + Errors + Logical On Error GoTo Finish LastFormulaRow = Split(Cells.SpecialCells(xlCellTypeFormulas, AllTypes).Address, "$") _ (UBound(Split(Cells.SpecialCells(xlCellTypeFormulas, AllTypes).Address, "$"))) Exit Function Finish: MsgBox "没有发现数据!" End Function
下面的示例代码10忽略最后一行带有公式的单元格,即当最后一行的单元格中含有公式时,将倒数第二行作为最后一行,即只考虑直接输入到工作表中的数据。当最后一行没有公式但被隐藏时,并不影响该方法的判断。 [示例代码10] Sub SpecialCells_LastRowxlCellTypeConstants() Dim MyRow As Range On Error GoTo Finish Set MyRow = Intersect([A:A], Cells. _ SpecialCells(xlCellTypeConstants).EntireRow).EntireRow '获取最后一行 MsgBox "最后一行是第" & Split(MyRow.Address, "$") _ (UBound(Split(MyRow.Address, "$"))) & “行” Set MyRow = Nothing Exit Sub Finish: MsgBox "没有发现数据!" End Sub 注:因为上述代码使用了’Split’函数,故只适合于Office2000及以上的版本。 该方法也允许我们指定单个数据类型,诸如数字数据或文本数据,如下所示。
下面,我们查找的最后一行是仅在行中有数字(而不包含公式)的单元格的最后一行。 [示例代码11] Sub SpecialCells_LastRowxlCellTypeNumberConstants() Dim MyRow As Range On Error GoTo Finish Set MyRow = Intersect([A:A], Cells. _ SpecialCells(xlCellTypeConstants, xlNumbers).EntireRow) '获取最后一行 MsgBox "最后一行是第" & Split(MyRow.Address, "$") _ (UBound(Split(MyRow.Address, "$"))) & “行” Set MyRow = Nothing Exit Sub Finish: MsgBox "没有发现数据!" End Sub
下面,我们查找的最后一行是仅在行中有文本(而不包含公式)的单元格的最后一行。 [示例代码12] Sub SpecialCells_LastRowxlCellTypeTextConstants() Dim MyRow As Range On Error GoTo Finish Set MyRow = Intersect([A:A], Cells. _ SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow) '获取最后一行 MsgBox "最后一行是第" & Split(MyRow.Address, "$") _ (UBound(Split(MyRow.Address, "$"))) & “行” Set MyRow = Nothing Exit Sub Finish: MsgBox "没有发现数据!" End Sub
下面,我们查找的最后一行是仅在行中有公式的单元格的最后一行。 [示例代码13] Sub SpecialCells_LastRowxlCellTypeFormulas() Dim MyRow As Range On Error GoTo Finish Set MyRow = Intersect([A:A], Cells. _ SpecialCells(xlCellTypeFormulas).EntireRow).EntireRow '获取最后一行 MsgBox "最后一行是第" & Split(MyRow.Address, "$") _ (UBound(Split(MyRow.Address, "$"))) & “行” Set MyRow = Nothing Exit Sub Finish: MsgBox "没有发现数据!" End Sub
同上面所讲述的一样,我们也能使用SpecailCells方法去找到其它特定类型的单元格所在的最后一行,下面是这些常量的一个完整的列表: XlCellTypeAllFormatConditions (任何格式的单元格) XlCellTypeAllValidation (带有数据有效性的单元格) XlCellTypeBlanks (所使用区域中的空白单元格) XlCellTypeComments (包含有批注的单元格) XlCellTypeConstants (包含有常量的单元格) XlCellTypeFormulas (包含有公式的单元格) XlCellTypeLastCell (已使用区域中的最后一个单元格(看下面)) XlCellTypeSameFormatConditions (有相同格式的单元格) XlCellTypeSameValidation (有相同数据有效性条件的单元格) XlCellTypeVisible (工作表中所有可见的单元格)
[此贴子已经被作者于2006-11-3 8:57:58编辑过] |