Getting rid of Merged cells
Vertically Merged Cells

I did NOT test against vertically merged cells, but it should not trigger an error (just unmerge them).

You code will unmerge the cells and set each cells .HorizontalAlignment = xlCenterAcrossSelection.
Target Area
Changing the target area from a Worksheet to a Range would make your code more versatile.

Sub fixMergedCells(sh As Worksheet)

Sub fixMergedCells(Target As Range)
    Set Target = Intersect(Target, Target.parent.UsedRange)


SpecialCells
SpecialCells are a PITA.  I would use Range.Find(&quot;*&quot;, SearchFormat:=True).

   Application.FindFormat.MergeCells = True
   Set c = Target.Find(&quot;*&quot;, SearchFormat:=True)
   Do Until c is Nothing 


Unfortunately neither SpecialCells or Range.Find are going to find Merged cells if they are blank.  It might be better to search each cell in the range.
Center Across Selection
Merged cells are not always centered.  You might want to add a condition that if centered then Center Across Selection.

 If .HorizontalAlignment = xlCenter Then .HorizontalAlignment = xlCenterAcrossSelection