Range.SpecialCells法可用于返回满足特定条件的Range对象。条件的类型使用xlCellType常量指定。
其中一个常量(xlCellTypeBlanks)被描述为使用不作进一步阐述引用“空单元格”。
有人知道这个方法使用什么定义的“空”吗?它是否包括没有值/公式但有各种其他功能(数据验证、常规格式、条件格式等)的单元格?
发布于 2018-04-19 15:12:41
该类型包括范围内既不包含常数也不包含公式的单元格子集。从一个空表开始,我们在A1和A10中放了一些东西,然后运行:
Sub ExtraSpecial()
Set r = Range("A:A").SpecialCells(xlCellTypeBlanks)
MsgBox r.Count
End Sub我们得到:

格式和注释不包括在内。还请注意,A10下面的所有“空”单元格也将被忽略。
发布于 2019-01-22 17:51:19
帕帕勒夫的回答指出,"xlCellTypeBlanks“排除了与特殊单元格类型"xlCellTypeLastCell”相同的计算“使用范围”的特定版本中的任何单元格。通过测试,我发现"xlCellTypeLastCell“返回"UsedRange”属性上一次计算时的最后一个单元格。
换句话说,添加引用"UsedRange“的行实际上会改变SpecialCells方法的行为。这是如此不寻常/出乎意料的行为,我想我应该添加一个答案来记录它。
Sub lastCellExample()
Dim ws As Worksheet
Set ws = Sheets.Add
ws.Range("A1").Value = "x"
ws.Range("A5").Value = "x"
ws.Range("A10").Value = "x"
'Initially the "UsedRange" and calculated used range are identical
Debug.Print ws.UsedRange.Address
'$A$1:$A$10
Debug.Print ws.Range(ws.Range("A1"), _
ws.Cells.SpecialCells(xlCellTypeLastCell)).Address
'$A$1:$A$10
Debug.Print ws.Cells.SpecialCells(xlCellTypeBlanks).Address
'$A$2:$A$4,$A$6:$A$9
'After deleting a value, "UsedRange" is recalculated, but the last cell is not...
ws.Range("A10").Clear
Debug.Print ws.Range(ws.Range("A1"), _
ws.Cells.SpecialCells(xlCellTypeLastCell)).Address
'$A$1:$A$10
Debug.Print ws.Cells.SpecialCells(xlCellTypeBlanks).Address
'$A$2:$A$4,$A$6:$A$10
Debug.Print ws.UsedRange.Address
'$A$1:$A$5
'...until you try again after referencing "UsedRange"
Debug.Print ws.Range(ws.Range("A1"), _
ws.Cells.SpecialCells(xlCellTypeLastCell)).Address
'$A$1:$A$5
Debug.Print ws.Cells.SpecialCells(xlCellTypeBlanks).Address
'$A$2:$A$4
End Subhttps://stackoverflow.com/questions/49924308
复制相似问题