Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA Excel中使用If语句创建汇总表_Excel_Vba_Loops_Summary - Fatal编程技术网

在VBA Excel中使用If语句创建汇总表

在VBA Excel中使用If语句创建汇总表,excel,vba,loops,summary,Excel,Vba,Loops,Summary,我有一份工作表,其中包含一系列列,如下所示: 我需要创建一个汇总表,其中我可以通过ID对所有“Y”条目进行求和,这样汇总表将显示每列Y的计数,这样汇总表将包含C1、C2-C5,其中第2-5列是数字而不是布尔值 我已经创建了一个循环来检查该行是否应该包含在摘要中(日期、地区和职务角色都是可变的,因为它们是否应该包含在摘要中)。我现在需要对4个Y/N列进行分组和摘要,我只是不确定如何在VBA中执行,因为我不熟悉VBA语言 得到了很大的帮助吗 ID日期是/否1是/否2是/否3是/否4区域1作业 135

我有一份工作表,其中包含一系列列,如下所示:

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

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

得到了很大的帮助吗

ID日期是/否1是/否2是/否3是/否4区域1作业 1354894 2017年6月25日Y N N南部销售 1554968 2016年7月25日纽约北部管理 4581324 2017年8月19日Y Y N东行政 4586568 2016年6月18日Y N Y南部管理 4586568 2017年11月8日纽约东部销售 4587454 2016年4月23日Y N N N北销售 4587454 2017年12月9日纽约北部销售 4587454 2016年8月23日纽约州东区销售 4595681 2017年6月25日纽约西部销售 5651985 2016年7月25日纽约西部销售 5651985 2017年8月19日Y Y N南部管理 5651985 2016年6月18日纽约南部管理 5651985 2017年11月8日Y Y N东行政 7845658 2016年4月23日纽约东部销售 7851132 2017年12月9日纽约南部销售 7852120 2016年8月23日Y南部销售 9652158 02/08/2017纽约北部销售 9831524 2017年9月2日Y N Y N西行政

到目前为止的代码(无法复制和粘贴)

Sub-StartSum()
暗x等长
Dim Startdate作为日期
Dim EndDate作为日期
作为字符串的暗淡区域
作为字符串的角色
暗淡的桌子和长的一样
起始日期=工作表(“表3”)。范围(“A2”)
EndDate=工作表(“表3”)。范围(“A4”)
角色=工作表(“表3”)。范围(“B2”)
区域=工作表(“表3”)。范围(“C2”)
带工作表(“表1”)
x=2
表rw=2
不使用While单元格(“A”)。值“”

如果工作表(“Sheet1”).Range(“F”&x).value=区域和工作表(“Sheet1”).Range(“G”&x”).value和工作表(“Sheet1”).Range(“B”&x”).value>=开始日期和工作表(“Sheet1”).Range(“B”&x”).value,那么您就知道可以使用数据透视表做什么了

如图所示,如果将数据设置为一个表(在数据范围内按Ctrl+T键),并添加4个隐藏的辅助列(I到L),如下所示:

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

然后可以将数据透视表设置为这4个辅助列的总和。上面显示的布局示例,其中可以按区域、日期等显示摘要

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


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

抱歉:我不知道从哪里开始。到目前为止,我所拥有的只是如下结构:数据透视表为什么不进行排序?它是一个更大的工作簿的一部分,完全依赖于基于一个工作表中的结果的自动化。这一页需要显示另一页的摘要。非常感谢。不幸的是,有人告诉我,由于工具的标准化,我们不能使用数据透视表,数据透视表必须以特定的方式显示在表中。我简化了表格以寻求帮助。这是一个20页的工作簿,上面示例中的摘要字段将提供工作表中8列中4列的数据。它需要像在显示表上一样填充摘要表。用户将能够说出top n ID,该ID将基于一列显示top n,该列将是上述列中的2列。1)您仍然可以显示一个表,并使用getpivotdata公式按照所需的布局回拉数据。正在隐藏的数据透视表。2) 这意味着您还可以使用切片器来拾取前n个ID。(虽然我猜如果你不能显示数据透视表,那么你就不能显示切片器)!我可能会删除此答案,因此我建议您将上述信息添加到问题中,即您在我的答案下的主要评论。这将帮助其他人解决问题。另外,查看markdown table generator或其他一些工具,这些工具允许您以整洁的方式添加示例数据,因为当前呈现的数据不容易读取。
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 
=--(C2="Y")