Now I'm spinning out......

Give the Function a Name & Dim the variables

Function NotMerged(testRange As Range) As Range
Dim rngMA As Range
Dim cell As Range
Dim rngExclude As Range
Set up the Primary Loop to test
For Each cell In testRange
        Set rngMA = cell.MergeArea
        If rngMA.Address <> cell.Address Then
            If rngExclude Is Nothing Then
                Set rngExclude = cell
            Else
                Set rngExclude = Union(rngExclude, cell)
            End If
        End If
    Next cell
How does it know where to test, because at this point we actually haven't set set anything other than rngMA ( which I assume Bob means range Merged Area) = Cell.Address? Everything dimmed at this point is a range type variable. So this line
Set rngExclude = Union(rngExclude ,cell)
effectively means
. Set rngExclude= Union(cell, cell)
which joins the merged cells as a defined range, or am I reading this wrong?

The Secondary (Alternative) loop ......
If rngExclude Is Nothing Then
        Set NotMerged = testRange
    Else
        Set rngMA = rngExclude.Cells(1, 1).MergeArea
        rngMA.MergeCells = False
        Set NotMerged = AntiUnion(testRange, rngExclude)
        rngMA.MergeCells = True
    End If
End Function
We call the following section (Function) from within the line Set Not Merged = AntiUnion( testRange, rngExclude).

Function AntiUnion(SetRange As Range, UsedRange As Range) As Range
Dim saveSet
    saveSet = SetRange
    SetRange.ClearContents
    UsedRange = 0
    Set AntiUnion = SetRange.SpecialCells(xlCellTypeBlanks)
    SetRange = saveSet 
End Function