excel排序/过滤/使用宏自动计数数据

时间:2014-09-26 08:54:57

标签: excel vba pivot

所以我有一个包含几列的excel数据表(sheet1)。

公司|产品代码|日期|名字|

和几行填充上述所有细节。

e.g。

company 1 | adar1 | 01/sep/14 | title1 |
company 2 | adar2 | 04/sep/14 | title2 |
company 3 | adar1 | 09/sep/14 | title3 |
company 4 | adar3 | 10/oct/14 | title4 |
company 1 | adar2 | 18/oct/14 | title5 |
company 2 | adar1 | 04/nov/14 | title6 |
company 3 | adar3 | 09/nov/14 | title7 |
company 4 | adar3 | 01/nov/14 | title8 |

如您所见,公司名称不同。 产品名称不同。 日期各不相同 以及我们不关心的名称/标题。

我想要做的是应用某种可以执行以下操作的过滤器:

每月,计算相同的产品名称PER COMPANY,并使用以下格式在新工作表(sheet2)上创建行/列:

company | quantity | product code | date in specific format below |
company 1    n           adar1       201409
company 1    n           adar2       201409
company 2    n           adar1       201409
company 1    n           adar2       201409
company 1    n           adar1       201410
company 1    n           adar2       201411

等等

意味着公司1在2014年9月(201409)使用了n个adar1产品,n个adar2产品 公司2在2014年9月和2014年10月等使用了n adar1和adar3的n,

我相信你明白了。

我可以使用数据透视表完成上述所有操作,但我想知道在sheet1上输入新值时是否有一个宏或某些函数/代码可以在sheet2上自动完成上述所有操作。

谢谢。

1 个答案:

答案 0 :(得分:0)

我会用这样的SQL来解决这个问题:

SELECT * FROM (SELECT s.company, COUNT(s.company) as quantity, s.product_code, "20"&right(s.date,2)&iif(right(left(s.date,6),3)="jan","01",iif(right(left(s.date,6),3)="feb","02","03"))&left(s.date,2) as new_date FROM [Sheet1$] as s GROUP BY s.company,s.product_code,s.date) ORDER BY new_date DESC

要使用它,请参阅数据 - >外部数据 - >来自其他来源 - > Microsoft Query或使用我的SQL AddIn:http://blog.tkacprow.pl/?page_id=130

上面的SQL仍然缺少mar-dec月份的映射。我相信你可以自己添加它们。

注意1:要在更新值时刷新此值,您可以添加一个宏按钮来刷新表格或覆盖VBA中的Worksheet Change事件。