【问题标题】:Excel adjust height of merged cells automaticallyExcel自动调整合并单元格的高度
【发布时间】:2013-10-15 12:52:47
【问题描述】:

我在 excel 中有一个小问题。我没有使用 excel 宏的经验,如果能得到一些帮助,我将不胜感激。我正在尝试找到一个宏来调整合并单元格的高度以适合其内容。自动地。我发现可以对多列中的单元格执行此操作,但不能对多行执行此操作,也不能自动执行此操作:

 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

结束子

最终结果应该是这样的: 提前谢谢你。

【问题讨论】:

  • 您应该能够对行遵循类似的模式:如果合并单元格然后取消合并它们,自动调整第一个单元格并注意适合的行高。然后重新合并单元格并将最后一个单元格的高度设置为您记下的高度减去所有其他行的高度。

标签: excel vba


【解决方案1】:

类似:

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

【讨论】:

  • 这在 rng.Cells(1).MergeArea 的高度大于 rng.Cells(1).RowHeight 的高度时不起作用,因为在这种情况下它会尝试设置负数MergeArea 的最后一个单元格的 RowHeight。这可以通过在最后一个“With”部分添加一个 if 来解决,如下所示: With .Cells(1).MergeArea If h > .Height Then .Cells(.Cells.Count).RowHeight = _ .Cells(.Cells. Count).RowHeight + (h - .Height) End If End With
【解决方案2】:

如果您允许 Excel 工作表为您完成一些繁重的工作,则有一种更简单的方法。

以下示例适用于常见情况,即您有一些包含几列但只有一行的单元格(即,一些列合并到一行上)。通常的问题是,在某些情况下,合并单元格中的换行文本的行高不能适应换行文本的高度(例如,公式或数据库查找的结果会给出大量不同数量的文本)

要解决此问题,请通过在用户不可见的某些列中执行以下操作来模拟合并单元格的单单元格版本:

  1. 在与合并单元格位于同一行的单个单元格中,放置相同的公式或简单地将公式设置为等于对合并单元格的引用。
  2. 对所有合并的单元格执行此操作。
  3. 使单个单元格版本的宽度等于每个合并单元格的宽度。您现在拥有一组合并单元格的单单元格版本,它们位于相同的行上,但具有相同的列宽。
  4. 为这些单个单元格命名。
  5. 编写一个函数,循环遍历所有这些命名的单个单元格区域,并为每个区域调用以下函数:

    Private Sub AutosizeLongFormInput(rng As Range)
        If Not rng.EntireRow.Hidden = True Then
            rng.EntireRow.AutoFit
        End If
    End Sub
    

【讨论】:

  • 第 3 步对我来说似乎很棘手,因为测量单位不匹配。例如,对于标准列宽 8.43(64 像素),.MergeArea.Width 返回 48。试图从这里设置复制单元格的宽度让我采取了一种复杂的方法,尝试一次,看看我离我有多远,根据错误因素进行调整,然后再试一次!它有效,但它很可怕。我错过了什么吗?
  • @AjV Jsy- 我发布的解决方案假设您有一些固定宽度的合并单元格,并且只想自动调整行的高度以适合其包装的文本。因此,设置复制单元格宽度的过程在设计时是手动的。如果您使复制单元格比真正的合并单元格稍窄,那么它们应该为您提供一个自动高度,该高度总是足够大以适合所有文本。如果你需要做很多,那么编写一个快速实用宏,给出所选单元格的宽度总和,以帮助获得复制单元格所需的宽度。
【解决方案3】:

这个呢:

'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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多