【发布时间】:2019-02-11 23:53:16
【问题描述】:
我有一个合并列 A 中的连续单元格的例程。我需要合并列 B 中顺序匹配的单元格,但不合并合并列 A 单元格的行边界。我对 A 列的合并按预期工作。
但是,如果 B 列中的值具有从合并的 A 单元格旁边开始并继续到下一个单元格的连续值,则它们会跨边界合并。如何将顺序匹配的 B 细胞合并基于已合并的 A 细胞?
以下是我的代码当前如何合并 A 列合并单元格的行边界:
这是我打算让它看起来的样子:
我当前的代码:
Sub MergeV()
' Merge Administration and Category where sequentional matching rows exist
' Turn off screen updating
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim Current As Worksheet
Dim lrow As Long
For Each Current In ActiveWorkbook.Worksheets
lrow = Cells(Rows.Count, 1).End(xlUp).Row
Set rngMerge = Current.Range("A2:B" & lrow)
MergeAgain:
For Each cell In rngMerge
If cell.Value = cell.Offset(1, 0).Value And IsEmpty(cell) = False Then
Range(cell, cell.Offset(1, 0)).Merge
GoTo MergeAgain
End If
Next
Next Current
' Turn screen updating back on
Application.Calculation = xlCalculationAutomatic
End Sub
任何有关完成此操作的指导将不胜感激!
【问题讨论】:
-
对于初学者,您应该将
ScreenUpdating和DisplayAlerts重新“打开”,方法是在True之后将它们设置回True -
使用 进行检查? cell.Offset(-1,0).MergeArea.Address 以确保 A 列单元格范围内的最后一行
-
@Marcucciboy2 严格来说,Excel 会自动将
ScreenUpdating重置为 True,但就我而言,我更喜欢明确说明。 -
感谢@Cyril 的建议。我在 If 语句中添加了以下内容,但它并没有改变结果。 如果 cell.Value = cell.Offset(1, 0).Value And IsEmpty(cell) = False And cell.Row
-
@JohnMiller 检查涉及完整的“?cell.offset(-1,0).mergearea.address”,它应该提供一个范围。您需要确定该范围的最后一行,最好将其保存为变量(k),然后您的 if 语句包括 cell.row