2016-12-22 3 views
0

Ich brauche einen schnellen Code, um das Format aller leeren Zellen zu löschen. Ich habe diesen Code geschrieben, aber es ist zu langsam. Gibt es eine Möglichkeit, es schneller zu machen?VBA Format von leeren Zellen in Excel entfernen

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 

Dieser Code funktioniert, aber es ist langsam, da es Zelle für Zelle gehen muss. Gibt es eine Möglichkeit, den gesamten Bereich außer den Zellen mit Inhalt auszuwählen?

Update: Vielen Dank an die Kommentare von bobajob und jordan Ich konnte den Code aktualisieren und es viel schneller und optimiert. Es ist der neue Code:

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 

So jetzt ist es gelöst.

+0

Versuchen 'sheet.SpecialCells (xlCellTypeBlanks)' – bobajob

+1

Sie brauchen nicht Activate' das Blatt 'Änderungen zu machen, verwenden Sie auch' Application.ScreenUpdating = False' und 'Application.Calculation = xlCalculationManual' am Anfang des Subs, um die Dinge zu beschleunigen, aber denken Sie daran, sie am Ende Ihres Subs wieder auf' True' und 'xlCalculationAutomatic' zu setzen – Jordan

Antwort

1
  • Zum einen müssen Sie nicht überprüfen, ob eine Zelle ist vor unmerge es verschmolzen. So unmerge alle Zellen in sheet ...

    sheet.UsedRange.UnMerge 
    
  • Sie brauchen nicht ein Blatt zu aktivieren, bevor es zu verändern

  • Wie in den Kommentaren erwähnt, können Sie alle Zellen auf einmal ändern, indem Sie

    sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats 
    
  • Drehen Calculation auf manuelle und ScreenUpdating auf false ist eine einfache go-to-Methode den meisten VBA-Code zu beschleunigen!

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

So Sub Ihre resultierende würde

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 

Ein letzter Schritt sein, die Dinge zu beschleunigen, in dem UsedRange ein wenig mehr graben würde. Es kann berüchtigt sein, sich an lange ungenutzte Zellen zu erinnern und viel größer als nötig zu sein. Wenn Sie Ihr Blattlayout kennen, gibt es möglicherweise eine Möglichkeit, den Bereich, mit dem Sie arbeiten, einzuschränken.

einige Methoden Siehe hierzu hier tun: Getting the actual usedrange

Verwandte Themen