У меня есть лист с некоторыми ячейками, объединенными в ряды, а некоторые нет. Я хочу обернуть все ячейки, и если строки содержат объединенные ячейки, установите высоту строк на максимальную высоту всех ячеек
. В файле excel вы можете найти лист, с которым я работаю , что я хочу иметь, макрос Excel, который я написал, что я получаю с этим макросом. Я также поместил их здесь.
Вот что у меня есть: (столбец D - скрытый столбец)
Это то, что я хочу иметь: ( остальную часть листа см. в прикрепленном файле excel)
Я написал макрос VBA excel для этой работы, но не повезло.
Sub MergeCells2()
Application.DisplayAlerts = False
Dim allRange As Range
Dim xCell As Range
On Error Resume Next
Dim i_row As Integer
Dim nRowsToMerge As Integer
Dim rangeToMerge As Range
Worksheets("What I have").Activate
LastCol = ActiveSheet.Range("a1").End(xlToRight).Column
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, LastCol).End(xlUp).Row
Set allRange = Application.Range("a1", ActiveSheet.Cells(LastRow, LastCol))
allRange.WrapText = True
If allRange Is Nothing Then Exit Sub
nRowsToMerge = 1
Set heightToSet = Range("A2").RowHeight
For i_row = 2 To LastRow
Set i_rowRange = allRange.Rows(i_row - 1)
If (allRange.Cells(i_row, 1) = "") Then
nRowsToMerge = nRowsToMerge + 1
ElseIf nRowsToMerge = 1 Then
heightToSet = i_rowRange.RowHeight
Else
Set rangeToMerge = ActiveSheet.Range(ActiveSheet.Cells(i_row - nRowsToMerge, 1), ActiveSheet.Cells(i_row - 1, LastCol))
For Each xCell In rangeToMerge
cellrow = xCell.Row
If (rangeToMerge.Cells(cellrow, 1) = "") Then
If xCell.Value = "" Then
Range(xCell, xCell.Offset(-1, 0)).Merge
End If
End If
Next
rangeToMerge.RowHeight = heightToSet
heightToSet = i_rowRange.RowHeight
nRowsToMerge = 1
End If
Next i_row
End Sub
Вот что я получаю:
Я не знаю, что с ним не так, и должен сказать, что я не очень разбираюсь в программировании на VBA.
Надеюсь, я понял вопрос. Пожалуйста, помогите, я работаю над этим уже несколько дней: (* 1027 *
Cheers, Eda