汇总合并单元格中的列值

时间:2015-10-10 15:42:26

标签: excel vba merge sum

我有一个非常具体的案例,即在合并的单元格中自动汇总值,但我无法正确循环:

我的表格中有九列,前五个F包含有关客户和日期的信息。在其他四列中有一堆变量,前两个(列GH)手动放入,最后两个应该自动计算(I是使用Excel公式计算,F将使用VBA计算。

每当一个新变量放入列Range("A:E")而没有更改该行的客户端和日期部分Range(A:E)时,我希望I的单元格与这些变量合并以上。在这种情况下,我还希望最后一列Private Sub Worksheet_Change(ByVal Target As Range) Dim tmp As Range Dim i As Integer For Each tmp In Range("F4:F1000") If tmp.Value <> "" Then If tmp.Offset(0, -1).Value = "" Then Range(tmp.Offset(0, -1), tmp.Offset(-1, -1)).MergeCells = True Range(tmp.Offset(0, -2), tmp.Offset(-1, -2)).MergeCells = True Range(tmp.Offset(0, -3), tmp.Offset(-1, -3)).MergeCells = True Range(tmp.Offset(0, -4), tmp.Offset(-1, -4)).MergeCells = True Range(tmp.Offset(0, -5), tmp.Offset(-1, -5)).MergeCells = True Range(tmp.Offset(0, 3), tmp.Offset(-1, 3)).MergeCells = True Else tmp.Offset(0, -1).MergeCells = False tmp.Offset(0, -2).MergeCells = False tmp.Offset(0, -3).MergeCells = False tmp.Offset(0, -4).MergeCells = False tmp.Offset(0, -5).MergeCells = False tmp.Offset(0, 3).MergeCells = False End If End If Next tmp End Sub 合并特定的行数。该合并过程的代码基本上可以正常工作,具体如下:

I

棘手的部分如下:我希望最后一列H的合并区域自动对列D中相同行中列出的值求和,如下图所示(图片仅显示列HElse

http://i.stack.imgur.com/kebpQ.jpg

我的想法是将以下代码放在i = (tmp.Offset(0, -1).MergeArea.Rows.Count - 1) * (-1) tmp.Offset(i, 3) = Application.Sum(Range(tmp.Offset(i, 2), tmp.Offset(0, 2)))

之前
F

不幸的是,当合并三行以上时,这个代码片段导致沿着单行的无限,混乱的合并和去合并过程(尽管当我运行整个sub而没有附加代码时,这个过程不会出现段)。

有没有人有想法解决这个问题?

此外,我还要感谢有关如何扩展我删除列{{1}}中的单元格的代码的代码的任何建议。我知道VBA通过使用单元格合并变得非常复杂,我最终必须坚持每一行中的重复值。尽管如此,如果有人喜欢这个挑战,我欢迎有关这个主题的帮助!

1 个答案:

答案 0 :(得分:0)

只需使用

range(range("A3").MergeArea.Cells(1,1).address).value

无论单元格是否合并,它都将起作用。将“A3”更改为您需要的单元格。

简而言之,就是在合并区域中找到左上角的单元格,这是存储值的位置。如果只有一个单元格,则返回该单元格值。