我有一个简单的Excel电子表格,它是每日更新的计数器列表。表格的格式如下:
A B C D E
date name computer info counter
示例:
A B C D E
04/04/2012 John 186 Workstation 4813
04/04/2012 Mary 181 Workstation 2273
04/05/2012 John 186 Workstation 4822
04/05/2012 Mary 181 Workstation 2274
04/06/2012 John 186 Workstation 4854
04/06/2012 Mary 181 Workstation 2275
04/06/2012 Bill 183 Workstation 3698
和儿子......
我需要做的是组合所有类似的细胞。因此,例如,将每个月的所有行组合起来,并从第一个列中减去最后一个E列,使其在新表中看起来如下所示。
A B C D E
April 2012 John 186 Workstation 41
April 2012 Mary 181 Workstation 2
April 2012 Bill 183 Workstation 0
以及每一个......请记住,每天都会更新,并且有很多天,几个月和几年。
我不知道如何考虑这样做,但我想我需要一个宏。如果有人有任何帮助会很棒!
答案 0 :(得分:2)
我花了一些时间在这上面,感觉就像我终于得到了你需要的东西。我会上传一个示例文件,但文件共享站点在这里被阻止:)。
现在我知道了,你想要在不同的标签中输出你的输出,但现在请耐心等待。
以下解决方案很冗长(由于您的问题的性质,预计会出现这种情况)。按照这里对T做的事情,不关心可能在某些单元格中弹出的中间错误,它将在一段时间内整理出来。
我假设您的工作表看起来像图像的黄色部分。 (不要介意第一栏中的日期,它们都是2012年4月的日期,这才是最重要的。)
在单元格F2中,粘贴以下公式
=IF(A2="","",MONTH(A2))
在单元格G2中,粘贴以下公式
=IF(A2="","",YEAR(A2))
在单元格H2中,粘贴以下公式,
=IF(B2="","",B2&"|"&F2&"@"&G2)
我正在使用字符“|”和“@”在这里,因为我假设他们不会出现任何名称! 请确保是这样!!
现在将单元格F2复制到H2,然后将它们一直粘贴到有数据的地方。
现在,我还假设你有8000行数据。如果您有超过8000行,请将以下公式中的所有'8000'替换为您想要的数字。
在单元格Q2中,粘贴以下公式,
=IF(ISERROR(INDEX($H$2:$H$8000,MATCH(0,COUNTIF($Q$1:Q1,$H$2:$H$8000),0))),"",INDEX($H$2:$H$8000,MATCH(0,COUNTIF($Q$1:Q1,$H$2:$H$8000),0)))
请注意,这是一个数组公式,需要使用Ctrl + Shift + Enter 输入。因此,在Q2中,您将此公式粘贴到公式栏中,而不是按Enter键,按Ctrl + Shift + Enter。我从here借用了这个公式。您可以查看该网站,了解该公式的工作原理。
现在,在单元格K2中,粘贴以下公式
=IF(OR(Q2=0,Q2=""),"",LEFT(Q2,FIND("|",Q2)-1))
在单元格P2中,粘贴以下公式
=IF(OR(Q2=0,Q2=""),"",VALUE(RIGHT(Q2,LEN(Q2)-(FIND("@",Q2)))))
在单元格O2中,粘贴以下公式
=IF(OR(Q2=0,Q2=""),"",VALUE(MID(Q2,FIND("|",Q2)+1,LEN(Q2)-LEN(K2)-LEN(P2)-2)))
在单元格J2中,粘贴以下公式
=IF(OR(Q2=0,Q2=""),"",TEXT(DATE(P2,O2,1),"mmm yyyy"))
在单元格L2中,粘贴以下公式
=IF(OR(Q2=0,Q2=""),"",INDEX($C$2:$C$8000,MATCH(K2,$B$2:$B$8000,0)))
在单元格M2中,粘贴以下公式
=IF(OR(Q2=0,Q2=""),"",INDEX($D$2:$D$8000,MATCH(K2,$B$2:$B$8000,0)))
在单元格N2中,粘贴以下公式,
=IF(OR(Q2=0,Q2=""),"",MAX(IF((($B$2:$B$8000=K2)*($F$2:$F$8000=O2)*($G$2:$G$8000=P2)),($E$2:$E$8000)))-MIN(IF((($B$2:$B$8000=K2)*($F$2:$F$8000=O2)*($G$2:$G$8000=P2)),($E$2:$E$8000))))
请再次注意,这是一个数组公式,需要使用Ctrl + Shift + Enter 输入。确保您已完成上述所有步骤
现在从J2到Q2选择单元格,复制它们并将它们粘贴到所需的位置。在示例屏幕截图中,这将是第5行(以涵盖所有可能性)。
你终于拥有了你需要的桌子。您现在可以使用简单的“等于”关系将此表链接到其他位置。此外,如果您愿意,可以从数据表中隐藏所有这些额外的列。
呼!!我真的希望能解决你的问题!!我认为我应该为所有这些努力拍拍!希望能帮助到你! :)
答案 1 :(得分:0)
将4个新列(F
添加到I
)添加到工作表中,然后输入以下公式:
(假设有100行数据:根据需要调整!)
F --> =DATE(YEAR(A1), MONTH(A1), 1)
G --> =MIN(IF(($B$1:$B$100=$B1)*($C$1:$C$100=$C1)*($D$1:$D$100=$D1)*($F$1:$F$100=$F1),$E$1:$E$100)) [press CTRL+SHIFT+ENTER (this is an array formula)]
H --> =MAX(IF(($B$1:$B$100=$B1)*($C$1:$C$100=$C1)*($D$1:$D$100=$D1)*($F$1:$F$100=$F1),$E$1:$E$100)) [press CTRL+SHIFT+ENTER (this is an array formula)]
I --> =H1-G1
(向下拖动以将公式展开到所有行)
它应该是这样的:
A B C D E F G H I
04/04/2012 John 186 Workstation 4813 =DATE(YEAR(A1), MONTH(A1), 1) {=MIN(IF(($B$1:$B$100=$B1)... {=MAX(IF(($B$1:$B$100=$B1)... =H1-G1
04/04/2012 Mary 181 Workstation 2273 =DATE(YEAR(A2), MONTH(A2), 1) {=MIN(IF(($B$1:$B$100=$B2)... {=MAX(IF(($B$1:$B$100=$B2)... =H2-G2
04/05/2012 John 186 Workstation 4822 =DATE(YEAR(A3), MONTH(A3), 1) {=MIN(IF(($B$1:$B$100=$B3)... {=MAX(IF(($B$1:$B$100=$B3)... =H3-G3
04/05/2012 Mary 181 Workstation 2274 =DATE(YEAR(A4), MONTH(A4), 1) {=MIN(IF(($B$1:$B$100=$B4)... {=MAX(IF(($B$1:$B$100=$B4)... =H4-G4
04/06/2012 John 186 Workstation 4854 =DATE(YEAR(A5), MONTH(A5), 1) {=MIN(IF(($B$1:$B$100=$B5)... {=MAX(IF(($B$1:$B$100=$B5)... =H5-G5
04/06/2012 Mary 181 Workstation 2275 =DATE(YEAR(A6), MONTH(A6), 1) {=MIN(IF(($B$1:$B$100=$B6)... {=MAX(IF(($B$1:$B$100=$B6)... =H6-G6
04/06/2012 Bill 183 Workstation 3698 =DATE(YEAR(A7), MONTH(A7), 1) {=MIN(IF(($B$1:$B$100=$B7)... {=MAX(IF(($B$1:$B$100=$B7)... =H7-G7
结果是:
A B C D E F G H I
04/04/2012 John 186 Workstation 4813 04/01/2012 4813 4854 41
04/04/2012 Mary 181 Workstation 2273 04/01/2012 2273 2275 2
04/05/2012 John 186 Workstation 4822 04/01/2012 4813 4854 41
04/05/2012 Mary 181 Workstation 2274 04/01/2012 2273 2275 2
04/06/2012 John 186 Workstation 4854 04/01/2012 4813 4854 41
04/06/2012 Mary 181 Workstation 2275 04/01/2012 2273 2275 2
04/06/2012 Bill 183 Workstation 3698 04/01/2012 3698 3698 0
为清楚起见,让我们在另一张表中获取相关数据的参考。假设上述数据存储在Sheet1
中,请在Sheet2
上输入以下内容:
A B C D E
=Sheet1!F1 =Sheet1!B1 =Sheet1!C1 =Sheet1!D1 =Sheet1!I1
=Sheet1!F2 =Sheet1!B2 =Sheet1!C2 =Sheet1!D2 =Sheet1!I2
...
结果是:
A B C D E
04/01/2012 John 186 Workstation 41
04/01/2012 Mary 181 Workstation 2
04/01/2012 John 186 Workstation 41
04/01/2012 Mary 181 Workstation 2
04/01/2012 John 186 Workstation 41
04/01/2012 Mary 181 Workstation 2
04/01/2012 Bill 183 Workstation 0
最后,在Sheet2
:
change the format列 A 改为“自定义”/ mmmm yyyy
,以便日期显示为您喜欢的(即April 2012
代替04/01/2012
)
最后但并非最不重要:use excel's advanced filter以摆脱重复。