Alle Werte einer Excel-Arbeitsmappe glätten

Das Makro glättet alle Werte einer Excel-Arbeitsmappe.

excel-makro-glätten

Das Makro ersetzt global die Formel =glätten. Damit hat der Benutzer die Möglichkeit alle Werte, in allen Sheets und in allen Zellen auf einmal zu glätten.

Sub TrimCells()
' Das Makro glättet alle Werte in der gesamten Arbeitsmappe
Dim intX As Integer

intX = MsgBox("Alle Daten der Arbeitsmappe glätten?", vbQuestion + vbYesNo, "Glätten")
    If intX = vbYes Then

  Dim objSh As Worksheet
  Dim rng As Range, rngR As Range
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .EnableEvents = False
    .ScreenUpdating = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
  End With
  
  For Each objSh In ThisWorkbook.Worksheets
    On Error Resume Next
    Set rngR = objSh.UsedRange.SpecialCells(xlCellTypeConstants)
    Err.Clear
    On Error GoTo ErrExit
    
    If Not rngR Is Nothing Then
      For Each rng In rngR
        rng = Trim(rng)
      Next
    End If
  Next
  
ErrExit:
  
  With Application
    .EnableEvents = True
    .ScreenUpdating = True
    .Calculation = lngCalc
  End With
  
  Set rng = Nothing
  Set rngR = Nothing
  Set objSh = Nothing


    MsgBox "Alle Daten wurden geglättet.", vbInformation + vbOKOnly, "Glätten erfolgreich"
  
    Else

    MsgBox "Glätten abgebrochen.", vbInformation + vbQuestion, "Abbruch"

    End If
    
End Sub

Bereich mit Makro glätten

Man kann die Funktion =Glätten() auch über ein Makro ausführen lassen.
Das Makro dazu:

Sub GlaettenTabelle1()
    Dim rC As Range
    Sheets("Tabelle1").Select
    Application.ScreenUpdating = False
    For Each rC In ActiveSheet.Range("F12:N1000")
        If Not (rC.HasFormula) Then rC = Trim(rC)
    Next
    
End Sub

Es wird der Bereich F12:N1000 in der Tabelle1 geglättet.

Die Funktion kann genutzt werden, wenn man z.B. Werte von einer Excel-Arbeitsmappe in die andere kopiert und die dortigen Formeln nicht mehr funktionieren. Ich hatte das Problem mit der Formel =ANZAHL(). Obwohl keine Werte in Zellen geschrieben waren, wurde die Zelle als befüllt erkannt. Die Formel zählte die „leere“ Zelle mit. Mit dem Glätten-Makro wurde das Problem schnell und einfach gelöst.

Möchte man die letzte beschriebene Zeile dynamisch bestimmen lassen, dann muss man das Makro anpassen und mehrere kleine Makros berücksichtigen

Sub GlaettenTabelle1()
    Dim rC As Range
    Dim loletzte As Long
    
    Application.ScreenUpdating = False
    Sheets("Tabelle1").Select
    
    loletzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    
        For Each rC In ActiveSheet.Range("B12:n" & letzte)
        If Not (rC.HasFormula) Then rC = Trim(rC)
    Next
       
End Sub