1

我有一个 Excel 表,其中包含多个项目 1、2、3 ...,每个项目都有子项目 1.1、1.2 等。我使用子项目列表作为我的关键列并使用 vlookups 填充主要项目,但只有显示每个主要项目一次。

/|    A    |    B     |    C     |
-+---------+----------+----------+
1| Item1   |  1.Note  |  Item1.1 |
2|         |          |  Item1.2 |
3|         |          |  Item1.3 |
4| Item2   |  2.Note  |  Item2.1 |
5|         |          |  Item2.2 |
6|         |          |  Item2.3 |
7|         |          |  Item2.4 |
8| Item3   |  3.Note  |  Item3.1 |
9|         |          |  Item3.2 |
0|         |          |  Item3.3 |

C是原始数据;A并且B是公式。

专栏B有注释,所以文字可能很长。我想包装笔记以占用所有可用的行。我可以通过选择B1:B3并合并它们来手动执行此操作,但是如果我将项目添加到 column ,它将不会更新C

我不在乎单元格是合并还是只是包裹和重叠。

这可以在公式或 VBA 中完成吗?

4

2 回答 2

1

扩展 Jon Fournier 的答案,我更改了范围计算以查找非空白单元格并添加代码以关闭 Merge 抛出的警告对话框。我还将函数更改为公共,以便我可以从宏对话框中运行它。

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

Jon 的第二部分应该在每次重新计算时运行宏,它似乎不起作用,但对于我正在进行的少量更新而言,这对我来说并不重要。

于 2008-12-04T01:09:24.093 回答
0

使用 VBA 可以做到这一点,我想我不知道你是否可以在没有 VBA 的情况下做到这一点。基本上你会做的是每次你的工作表计算你运行代码来重新合并单元格。

我构建了一个与您类似的简单电子表格,并将以下代码放入工作表的代码模块中:

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
于 2008-12-03T20:21:09.557 回答