使用VBA Excel中的If语句创建摘要表

时间:2017-12-20 19:17:40

标签: excel vba loops summary

我有一个包含以下一系列列的工作表:

我需要创建一个汇总表,我可以通过ID汇总所有“Y”条目,这样汇总表将显示每列Y的计数,因此汇总表将包含C1,C2-C5和列2-5是数字而不是布尔值。

我已经创建了一个循环来检查该行是否应该包含在摘要中(日期,区域和作业角色都是可变的,如果它们应该包含在摘要中)我现在需要对行进行分组和汇总。 4个Y / N列,我只是不确定如何在VBA中这样做,因为它不是我熟悉的语言。

任何帮助都很受欢迎

ID日期Y / N 1 Y / N 2 Y / N 3 Y / N 4区域1作业 1354894 25/06/2017 Y N Y N South Sales 1554968 25/07/2016 N Y N Y North Admin 4581324 19/08/2017 Y N Y N East Admin 4586568 18/06/2016 Y N N Y South Admin 4586568 08/11/2017 N Y Y N East Sales 4587454 23/04/2016 Y N Y N North Sales 4587454 09/12/2017 N Y N Y North Sales 4587454 23/08/2016 Y N Y N East Sales 4595681 25/06/2017 Y N N Y West Sales 5651985 25/07/2016 N Y Y N West Sales 5651985 19/08/2017 Y N Y N South Admin 5651985 18/06/2016 N Y N Y South Admin 5651985 08/11/2017 Y N Y N East Admin 7865658 23/04/2016 Y N N Y East Sales 7851132 09/12/2017 N Y Y N South Sales 7852120 23/08/2016 Y N Y N South Sales 9652158 02/08/2017 N Y N Y North Sales 9831524 02/09/2017 Y N Y N West Admin

到目前为止

代码(无法复制和粘贴)

Sub StartSum()

Dim x as long
Dim Startdate as Date
Dim EndDate as Date
Dim Region as String
Dim Role as String
Dim tablerw as long


Startdate = Worksheets("Sheets3").Range("A2")
EndDate =  Worksheets("Sheets3").Range("A4")
Role =  Worksheets("Sheets3").Range("B2")
Region =  Worksheets("Sheets3").Range("C2")

With Worksheets("Sheet1")

x = 2
tablerw = 2
Do While Cells("A").Value <>""

If Worksheets("Sheet1").Range("F" & x).value = Region and     Worksheets("Sheet1").Range("G" & x).value and Worksheets("Sheet1").Range("B" & x).value >= Startdate and Worksheets("Sheet1").Range("B" & x).value <= EndDate Then
 Worksheets("Sheet2").Range("A" & tablerw).Value =  Worksheets("Sheet1").Range("A" & x).Value
 Worksheets("Sheet2").Range("B" & tablerw).Value = Worksheets("Sheet1").Range("C" & x).Value
 Worksheets("Sheet2").Range("C" & tablerw).Value = Worksheets("Sheet1").Range("D" & x).Value
 Worksheets("Sheet2").Range("D" & tablerw).Value = Worksheets("Sheet1").Range("E" & x).Value
 Worksheets("Sheet2").Range("E" & tablerw).Value = Worksheets("Sheet1").Range("F" & x).Value
 Tablerw = Tablerw + 1
 x = x + 1
End If
Next
End Sub 

我还没有做任何总结,因为不确定从哪里开始

1 个答案:

答案 0 :(得分:0)

所以你知道你可以用一个支点表来做什么。

如果您将数据设置为问题,则将其设置为表格(在数据范围内为Ctrl + T)并添加4个隐藏的帮助列(I至L),如下所示:

pivottable

请注意,4个结束列引用原始y / n列,但使用i2将“Y”转换为1(您可以将此公式拖到其他列中,表格会自动填充)。 / p>

=--(C2="Y")

然后,您可以将pivottable设置为对这4个辅助列进行求和。上面显示的示例布局,其中摘要可以按地区,日期等显示。

您还可以将源数据作为动态命名范围,并将您的数据透视表指向该位置。

如果您不允许展示数据透视表,请考虑您可以使用GetPivotData公式将数据从隐藏的数据透视表返回到您的规范设置,例如标准化的表格布局。您可以通过VBA生成pivottables并将源定位到指定范围。 Stack Overflow上有很多例子。