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

时间:2016-12-22 15:48:15

标签: excel vba excel-vba format

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

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

这段代码有效,但由于需要逐个单元格,因此速度很慢。有没有办法选择除具有内容的单元格以外的整个范围?

更新: 感谢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

所以现在它已经解决了。

1 个答案:

答案 0 :(得分:1)

  • 首先,在取消合并之前,您无需检查单元格是否合并。所以要在sheet ...

    中取消合并所有单元格
    sheet.UsedRange.UnMerge
    
  • 您无需在更改工作表之前激活工作表

  • 如评论中所述,您可以使用

    一次更改所有单元格
    sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats
    
  • Calculation变为手动,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。记住长期未使用的细胞并且远远超过必要的细胞可能是臭名昭着的。如果您知道表格布局,可能有办法限制您使用的范围。

在此处查看一些执行此操作的方法: Getting the actual usedrange