Excel自动合并单元格
我有一个Excel表格有几个项目1,2,3 …,每个项目都有子项目1.1,1.2等。我使用子项目列表作为我的关键列,并使用vlookups填充主要项目,但只有显示每个主要项目一次。
/ | A | B | C | - + --------- + ---------- + ---------- + 1 | Item1 | 1.注意 Item1.1 | 2 | | | Item1.2 | 3 | | | Item1.3 | 4 | Item2 | 2.注意| Item2.1 | 5 | | | Item2.2 | 6 | | | Item2.3 | 7 | | | Item2.4 | 8 | Item3 | 3.注意| Item3.1 | 9 | | | Item3.2 | 0 | | | Item3.3 |
C列是原始数据,A和B是公式。
B列有笔记,所以文字可能很长。 我想包装笔记来占用所有可用的行。 我可以通过selectB1:B3并合并它们来手动执行此操作,但如果向C列中添加项目,则不会更新。我不关心这些单元格是合并还是重叠。
这可以在公式或VBA中完成吗?
扩展乔恩Fournier的答案,我已经改变了范围计算寻找非空白单元格,并添加代码closures合并抛出警告对话框。 我也把这个function改成了Public,所以我可以从macros对话框中运行它。
Public Sub AutoMerge() Dim LastRowToMergeTo As Long Dim i As Long Dim LastRow As Long Application.DisplayAlerts = False LastRow = Range("S" & CStr(Rows.Count)).End(xlUp).Row For i = 2 To LastRow LastRowToMergeTo = i Do While (Len(Range("D" & CStr(LastRowToMergeTo + 1)).Value) = 0) And (LastRowToMergeTo <> LastRow) LastRowToMergeTo = LastRowToMergeTo + 1 Loop With Range("D" & CStr(i) & ":D" & CStr(LastRowToMergeTo)) .Merge .WrapText = True .VerticalAlignment = xlVAlignTop End With i = LastRowToMergeTo Next i Application.DisplayAlerts = True End Sub
乔恩的第二部分,每次重新计算都应该运行macros,似乎并不起作用,但对于我正在做的less量更新来说并不重要。
这是可能的使用VBA,认为我不知道你是否可以做到这一点没有VBA。 基本上你会做的是每次你的工作表计算你运行代码重新合并单元格。
我构build了一个类似于您的简单电子表格,并将以下代码放在工作表的代码模块中:
Private Sub AutoMerge() Dim LastRowToMergeTo As Long Dim i As Long Dim LastRow As Long LastRow = Range("C" & CStr(Rows.Count)).End(xlUp).Row For i = 2 To LastRow LastRowToMergeTo = Range("B" & CStr(i)).End(xlDown).Row - 1 LastRowToMergeTo = Application.WorksheetFunction.Min(LastRowToMergeTo, LastRow) With Range("B" & CStr(i) & ":B" & CStr(LastRowToMergeTo)) .Merge .WrapText = True .VerticalAlignment = xlVAlignTop End With i = LastRowToMergeTo Next i End Sub Private Sub Worksheet_Calculate() AutoMerge End Sub