Reputation: 35
I have a little problem in excel. I not experienced with excel macros and would be grateful for some help. I am trying to find a macro which ajustes the height of a merged cell to fit its content. automatically. I found something with which could do that for cells in several columns but not for several rows and also not automatically:
Sub AutoFitMergedCellRowHeight()
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
Dim iX As Integer
If ActiveCell.MergeCells Then
With ActiveCell.MergeArea
If .Rows.Count = 1 And .WrapText = True Then
Application.ScreenUpdating = False
CurrentRowHeight = .RowHeight
ActiveCellWidth = ActiveCell.ColumnWidth
For Each CurrCell In Selection
MergedCellRgWidth = CurrCell.ColumnWidth + _
MergedCellRgWidth
iX = iX + 1
Next
MergedCellRgWidth = MergedCellRgWidth + (iX - 1) * 0.71
.MergeCells = False
.Cells(1).ColumnWidth = MergedCellRgWidth
.EntireRow.AutoFit
PossNewRowHeight = .RowHeight
.Cells(1).ColumnWidth = ActiveCellWidth
.MergeCells = True
.RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _
CurrentRowHeight, PossNewRowHeight)
End If
End With
End If
End Sub
The end result should look like this:
Thank you in advance.
Upvotes: 0
Views: 30628
Reputation: 1
What about this:
'rRang is range of cells which are merged together
Sub AutoFitRowMergedCells(rRang As Range)
Dim iColW As Integer, iColWold As Integer, I As Integer
iColW = 0
For I = 1 To rRang.Columns.Count
iColW = iColW + rRang.Range("A" & I).ColumnWidth
Next I
rRang.UnMerge
iColWold = rRang.Range("A1").ColumnWidth
rRang.Range("A1").ColumnWidth = iColW
rRang.Range("A1").EntireRow.AutoFit
rRang.Range("A1").ColumnWidth = iColWold
rRang.Merge
End Sub
Upvotes: 0
Reputation: 176
There is a much easier way of doing this if you allow the Excel sheet to do some of the heavy lifting for you.
The following example works in the common scenario that you have some cells that comprise several columns but only a single row (i.e. some columns are merged together on a single row). The usual problem is that the row height for wrapped text in the merged cell does not accomodate the height of the wrapped text in some circumstances (e.g. the result of a formula or database lookup gives a large and varying amounts of text)
To solve this, simulate single celled versions of the merged cells by doing the following in some columns that are not visible to the user:
Write a function that loops through all of these named single cell ranges and calls the following function for each:
Private Sub AutosizeLongFormInput(rng As Range)
If Not rng.EntireRow.Hidden = True Then
rng.EntireRow.AutoFit
End If
End Sub
Upvotes: 4
Reputation: 166835
Something like:
Dim h, rng As Range
Set rng = Selection
With rng
.UnMerge
.Cells(1).EntireRow.AutoFit
h = .Cells(1).RowHeight
.Merge
.EntireRow.AutoFit
With .Cells(1).MergeArea
.Cells(.Cells.Count).RowHeight = _
.Cells(.Cells.Count).RowHeight + (h - .Height)
End With
End With
Upvotes: 4