【发布时间】:2017-04-28 18:15:16
【问题描述】:
我有一个大约 12,000 行的列表,其中包含项目编号、客户经理、创建日期、状态……等等。 目前我每两周制作一次报告,作为数据透视表,然后我用它们制作图表。我知道这可以自动化,因为我消除了数据透视表并使用 countifs 复制了结果。 现在我希望能够用 VBA 做同样的事情,直到用户可以进入电子表格,点击一个按钮,最新的数据就会被描绘出来。首先,我想探索一下 vba 中的一些 countif。
假设表格是这样的
A | B | C
proj.Number Account Manager Status
123 Person 1 Won
234 Person 2 Lost
345 Person 3 Quoted
目前这是我的代码,它适用于 countif,但它没有循环......而且我知道它可以以某种方式完成
Dim PersonOne as Range
Set PersonOne = Range("E2")
Dim PersonTwo as Range
Set PersonTwo = Range("E3")
Dim PersonThree as Range
Set PersonThree = Range("E4")
Range("D2") = "Person 1"
Range("D3") = "Person 2"
Range("D4") = "Person 3"
PersonOne = (WorksheetFunction.CountIf(Range("B2", Range("B2").End(xlDown)), "Person 1"))
PersonTwo = (WorksheetFunction.CountIf(Range("B2", Range("B2").End(xlDown)), "Person 2"))
PersonThree = (WorksheetFunction.CountIf(Range("B2", Range("B2").End(xlDown)), "Person 3"))
我如何自动化这个,以至于我什至不必写人的名字(我说 range(d2) = some person 的部分 我是否可以有一个代码来查找所有可能的唯一名称,将它们放在电子表格的某个范围内,然后计算该名称在给定范围内出现的次数?
谢谢
【问题讨论】:
-
有什么理由不使用数据透视表和数据透视图? support.office.com/en-us/article/…
-
我是唯一一个制作报告的人,大约有 40 人只查看它们。如果我可以随时为任何人提供此功能(无需他们构建数据透视表和图表),那么每个人都会更容易。而且我喜欢搞乱这样的事情,我只是不太擅长它,尽管我对代码需要做什么有一个基本的了解。虽然我很难使用循环......这就是我在这里的原因
-
您在计数后对数据做了什么?您可以创建一个数组来获取所有名称,然后循环遍历它。 This question 在第一个答案中有一个函数,用于检查数组是否已包含字符串。如果您需要,我可以将其全部写在答案中。
-
您可以自动导入数据,最后您可以说
ActiveWorkbook.RefreshAll,它会刷新数据透视表。您还可以解锁所有单元格,锁定您不希望用户弄乱的单元格并保护工作表。 -
只有一件事:避免编写已经可以在 excel(或任何软件)本身中完成的代码。它会更慢,有时会出错,当然也很耗时。
标签: vba excel pivot-table countif