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