Espero que isso seja o que você precisa. Eu adicionei comentários acima de cada linha significativa para que você possa acompanhar o que está acontecendo e fazer ajustes conforme necessário.
Isso pressupõe que seus dados na coluna C são representativos das linhas nas quais você precisa trabalhar. Você disse que deve continuar até a última linha - 1, já que a última linha contém data + hora ... bem, desde que não seja a coluna C que contém a data + hora, então tudo ficará bem:
Dim myData As Range
'Set a range by figuring out the length of your data based on column C data:
Set myData = Range("C2", Range("C2").End(xlDown))
'create two blank variables that we'll use
'to store data later:
colAdata = ""
colBdata = ""
'Loop through each row in the 'myData' range:
For Each cell In myData
'First, unmerge cells that are merged in columns A&B:
If cell(1, -1).MergeCells = True Then cell(1, -1).UnMerge
If cell(1, 0).MergeCells = True Then cell(1, 0).UnMerge
'Check if column A has data, and if so, grab its value and
'column B's value for use in the next iteration:
If cell(1, -1).Value <> "" Then
colAdata = cell(1, -1).Value
colBdata = cell(1, 0).Value
Else 'it's blank so enter the data from the row above:
cell(1, -1).Value = colAdata
cell(1, 0).Value = colBdata
End If
Next
Espero que isso ajude, deixe-me saber como está indo.