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

问题描述 投票:-5回答:1

我有一个包含一系列列的工作表,如下所示:

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

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

任何帮助都很受欢迎

ID日期Y / N 1是/否2 Y / N 3是/否4区域1工作1354894 25/06/2017 YNYN South Sales 1554968 2016年7月25日NYNY North Admin 4581324 08/19/2017 YNYN East Admin 4586568 18 / 06/2016 YNNY South Admin 4586568 08/11/2017 NYYN East Sales 4587454 23/04/2016 YNYN North Sales 4587454 09/12/2017 NYNY North Sales 4587454 08/23/2016 YNYN East Sales 4595681 06/25/2017 YNNY West Sales 5651985 07/25/2016 NYYN West Sales 5651985 08/19/2017 YNYN South Admin 5651985 06/18/2016 NYNY South Admin 5651985 08/11/2017 YNYN East Admin 7845658 23/04/2016 YNNY East Sales 7851132 09 / 12/2017 NYYN South Sales 7852120 08/23/2016 YNYN South Sales 9652158 02/08/2017 NYNY North Sales 9831524 02/09/2017 YNYN 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 

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

excel vba loops summary
1个回答
0
投票

所以你知道你可以用pivottable做什么。

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

pivottable

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

=--(C2="Y")

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.