我有一个非常具体的案例,即在合并的单元格中自动汇总值,但我无法正确循环:
我的表格中有九列,前五个F
包含有关客户和日期的信息。在其他四列中有一堆变量,前两个(列G
和H
)手动放入,最后两个应该自动计算(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
中相同行中列出的值求和,如下图所示(图片仅显示列H
至Else
)
我的想法是将以下代码放在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通过使用单元格合并变得非常复杂,我最终必须坚持每一行中的重复值。尽管如此,如果有人喜欢这个挑战,我欢迎有关这个主题的帮助!
答案 0 :(得分:0)
只需使用
range(range("A3").MergeArea.Cells(1,1).address).value
无论单元格是否合并,它都将起作用。将“A3”更改为您需要的单元格。
简而言之,就是在合并区域中找到左上角的单元格,这是存储值的位置。如果只有一个单元格,则返回该单元格值。