VBA合并重复的行并汇总具有多个条件的列

时间:2018-09-19 11:36:11

标签: excel vba

我在论坛上查看了多个答案,其中涉及如何合并工作表中的重复行,然后将重复项的值求和在一起,从而留下一行具有唯一单元格组合的行,而最后一行则作为单元格的总和重复值。不幸的是,我无法通过结合使用多列来找到有效的方法来确定它是否是一个需要合并和求和的重复项。

例如,我有3张纸-PreviousMonth,CurrentMonth和Difference,其中包含与上个月和本月相关的薪水信息。差异表需要合并上个月和本月的所有数据而没有重复项(我已经有一个宏可以执行此操作),但是我的宏还可以事先删除两个表中所有重复的行,因此,如果一名员工要求多个实例超时,我当前的宏将删除第一个超时行之后的所有超时行。

一个例子是 标题

Credit/Debit|Cost Code|Element|Surname|Forename|PayrollRef|Value

以及这些标题中的值

Debit|XXXX.XXXX.XXX|147 - R.Day x 1.5.|Williams|Matt|X|200
Debit|XXXX.XXXX.XXX|147 - R.Day x 1.5.|Williams|Matt|X|200

我想在我的粘贴和删除重复项宏生效之前发生的事情是循环遍历每张工作表,它可以是单独的或一个接一个地循环,并为每个员工中的每个员工标识任何重复的行工作表并将行合并在一起,但对value列求和。这是为了处理员工一个月内可以提出的多个加班要求。完成后,每个员工只能加班一行,例如:

Credit/Debit|Cost Code|Element|Surname|Forename|PayrollRef|Value
Debit|XXXX.XXXX.XXX|147 - R.Day x 1.5.|Williams|Matt|X|400   

任何帮助将不胜感激,如果您需要更多信息以帮助您,请随时询问我,因为我可以提供其他Macro来使用它们还是使用正确格式的更多伪数据。不幸的是,尽管我无法在电子表格中提供实际数据,但是我上面提供的是标题和数据的相同格式。

(我知道有很多类似的问题,并且已经看过很多类似的问题,所以如果有一个已经回答的问题可以解决我想要/需要的事情,我会很高兴地阅读如果您能指出我正确的方向

编辑:

我找到并试图在串联的列H上工作的代码是:

Sub Consolidate()
Dim ConsolidateRangeArray as Variant
ConsolidateRangeArray = Array("Sheet1R2C8:R98936C9")
Worksheets(Sheet1).Range("K").Consolidate _
Sources:=ConsolidateRangeArray, _
Function:xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
End Sub

当我使用这些代码时,它们会出现运行时1004错误“应用程序定义的错误或对象定义的错误”

此致

马特

2 个答案:

答案 0 :(得分:0)

我相信数据透视表可以解决问题,您将不需要删除重复项,所有重复项都将得到其值的总和,计数或任何您需要的值。这样一来,您可以拥有与现在相同的表,并具有所需的值,而无需运行甚至宏。

我建议放置一个命名范围以获取数据透视表的源,如下所示:

=OFFSET(*NameOfTheSourceSheet*!$A$1;0;0;COUNTA(*NameOfTheSourceSheet*!$A:$A);COUNTA(*NameOfTheSourceSheet*!$1:$1))

这样,当源表变大时,数据透视表将获得所有新行。

希望有帮助

答案 1 :(得分:0)

感谢达米安的帮助,但我想出了另一种使用VBA的方法。

一旦我将各列连接为1列,就对values列运行以下代码,并在右侧的2列中生成合并的重复总和

Sub ConsolidateFirst60K()
'
' ConsolidateFirst50K Macro
' Consolidate first row to 50K
'

'
Range("K1").Select
Selection.Consolidate Sources:= _
    "'\\Filepath Of File \[WorkbookName]Sheet1'!R1C8:R60000C9" _
    , Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
ActiveWindow.SmallScroll Down:=-24
End Sub

虽然有点粗糙,但是可以解决问题,我可以在进行中完善

我确实发现使用R1C1语法不能在65K行上工作Excel版本有时会遇到问题。我不确定该问题是否与最新版本有关。它在2013年无法正常运行,因此我不得不复制宏并将下半部分数据的范围更改为60k-120k

此致

马特