所以我有一个包含几列的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上自动完成上述所有操作。
谢谢。
答案 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事件。