Try these two procedures (I've used two because you said these are run at different times)
Sub BlankOutRepeatedCells(ByVal iColumn As Integer, ByVal iTopRow As Long, ByVal iBottomRow As Long)
Dim iRow As Long
Dim i As Long
iRow = iTopRow
Do While iRow <= iBottomRow
Do While Cells(iRow, iColumn) <> ""
i = iRow + 1
Do While Cells(iRow, iColumn) = Cells(i, iColumn) And i <= iBottomRow
Cells(i, iColumn).ClearContents
i = i + 1
Loop
iRow = i
Loop
iRow = iRow + 1
Loop
End Sub
Sub MergeBlankCells(ByVal iColumn As Integer, ByVal iTopRow As Long, ByVal iBottomRow As Long)
Dim iRow As Long
Dim i As Long
iRow = iTopRow
Do While iRow <= iBottomRow
Do While Cells(iRow, iColumn) <> ""
i = iRow + 1
Do While Cells(i, iColumn) = "" And i <= iBottomRow
i = i + 1
Loop
If i > iBottomRow Then Exit Do
With Range(Cells(iRow, iColumn).Address & ":" & Cells(i - 1, iColumn).Address)
.MergeCells = True
.VerticalAlignment = xlCenter
End With
iRow = i
Loop
iRow = iRow + 1
Loop
End Sub
Needless to say iCol is the column index to be Blanked/Merged & iTopRow/iBottomRow are the top and bot row index to be Blanked/Merged, therefore these two routines can be used on any column and row range.
If you specify the last row in the spread sheet then it will cause an error. This can be eliminated but I thought the chances of using 65,536 rows are a little slim !!
Also I would check the column an row index are valid if there is a posibility that they could be out of range (or bottom is above the top row) ?
Hope this is what you want