VBA从Excel中的空单元格中删除格式

我需要一个快速的代码来清理所有空单元格的格式。 我已经写了这个代码,但是它太慢了。 有没有办法让它更快?

Sub removeFormatEmpty() 'Declaration of variables Dim sheet As Worksheet Dim rcell As Range For Each sheet In Worksheets sheet.Activate 'Cells.UnMerge For Each rcell In sheet.UsedRange.Cells If rcell.MergeCells = True Then rcell.UnMerge End If If rcell.Value = "" Then rcell.ClearFormats End If Next rcell Next sheet End Sub 

这个代码的工作原理,但它慢,因为它需要逐个细胞。 有没有一种方法可以select整个范围除了含有内容的单元格?

更新:感谢bobajob和jordan的评论我已经能够更新代码,并使其更快,更优化。 这是新的代码:

 Sub removeFormatEmptyImproved() Dim sheet As Worksheet Application.Calculation = xlCalculationManual Application.ScreenUpdating = False For Each sheet In Worksheets 'sheet.Activate sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats Next sheet Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 

所以现在解决了。

  • 首先,在取消合并之前,您不必检查单元格是否合并。 所以为了解开所有单元格

     sheet.UsedRange.UnMerge 
  • 在修改之前,您不需要激活表格

  • 正如在评论中提到的,你可以通过使用一次改变所有的单元格

     sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats 
  • Calculation为Manual并将ScreenUpdating为false是一个简单的方法来加速大多数VBA代码!

     Application.Calculation = xlCalculationManual Application.ScreenUpdating = False ' <other code> ' Include error handling so that these are always set back! Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True 

所以你的结果Sub将是

 Sub removeFormatEmpty() Dim sheet As Worksheet Application.Calculation = xlCalculationManual Application.ScreenUpdating = False For Each sheet In ThisWorkbook.Worksheets sheet.UsedRange.UnMerge sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats Next sheet Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 

加快速度的最后一步是深入挖掘UsedRange 。 记住长时间未使用的细胞可能是臭名昭着的,并且远远大于必要的。 如果你知道你的图纸布局,可能有办法限制你正在使用的范围。

看到这样做的一些方法: 获取实际使用的范围