Да, с объединенными ячейками есть такая проблема. А рассчитать высоту строки можно примерно так:
Код
Sub Macro11()
' это всего лишь пример - один диапазон объединенных ячеек
' (несколько строк и столбцов, начиная с A1)
Set MergedRange = Range("A1").MergeArea
StartRow = MergedRange.Row
StartCol = MergedRange.Column
iRows = MergedRange.Rows.Count
iColumns = MergedRange.Columns.Count
' необходимо найти такую строку и столбец, где точно нет ни одного объединения ячеек.
' Первые неиспользованные подойдут
UnusedRow = ActiveSheet.UsedRange.Rows.Count + 1
UnusedCol = ActiveSheet.UsedRange.Columns.Count + 1
' устанавливаем ширину ячейки такую, как у объединенного диапазона...
Width1 = 0
For j = 1 To iColumns
Width1 = Width1 + Columns(StartCol + j - 1).ColumnWidth
Next
Cells(UnusedRow, UnusedCol).ColumnWidth = Width1
' разрешаем перенос...
Cells(UnusedRow, UnusedCol).WrapText = True
' заносим значение...
Cells(UnusedRow, UnusedCol).Value = MergedRange.Value
' а дальше сам Excel определит, какая должна быть высота строки
Height1 = Cells(UnusedRow, UnusedCol).RowHeight
For i = 2 To iRows
Height1 = Height1 - Rows(StartRow + i - 1).RowHeight
Next
' устанавливаем высоту первой строки объединенного диапазона такую,
' чтобы высота всего диапазона равнялась Cells(UnusedRow, UnusedCol).RowHeight
Rows(StartRow).RowHeight = Height1
Cells(UnusedRow, UnusedCol).Value = ""
End Sub
Если объединений в строке много, задача несколько усложнится - придется определять наибольшую высоту ячейки по строке и соответственно устанавливать высоту.
Я долго учился на чужих ошибках, и теперь мои собственные ошибки не хуже, чем у других.