Excel合并和组合像细胞一样

我有一个简单的Excel电子表格,是每日更新的计数器列表。 表格的格式如下:

ABCDE date name computer info counter 

例:

 ABCDE 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列,使它看起来像新的工作表中的以下内容。

 ABCDE April 2012 John 186 Workstation 41 April 2012 Mary 181 Workstation 2 April 2012 Bill 183 Workstation 0 

等等每一个…记住这是每天更新,并有很多天,几个月和几年。

我不知道如何去思考这个问题,但我认为我需要一个macros。 如果任何人有任何援助,这将是伟大的!

假设这是你想要做的

我花了一些时间在这个上,感觉就像我终于得到了你所需要的。 我会上传一个示例文件,但文件共享网站被阻止在这里:)。

现在我知道,你希望你的输出在不同的选项卡,但现在忍受我的这一点。

下面的解决scheme是冗长的(由于你的问题的性质预计)。 按照这里做的T来做,不关心可能在某些单元格中popup的中间错误,它们都会在一段时间内被整理出来。

我假设你的工作表看起来像图像的黄色部分。 (不要介意第一列中的date,他们都是2012年4月的date,这是重要的。)

在单元格F2中,粘贴下面的公式

=IF(A2="","",MONTH(A2))

在单元格G2中,粘贴下面的公式,

=IF(A2="","",YEAR(A2))

在单元格H2中,粘贴下面的公式,

=IF(B2="","",B2&"|"&F2&"@"&G2)

我正在使用字符“|” 和“@”在这里,因为我假设他们不出现在任何名字! 请确定这是如此!

现在将单元格F2复制到H2,并将其粘贴到任何有数据的位置。

现在,我还假设你有8000行数据。 如果你有超过8000行,用你想要的数字replace下面所有公式中的'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 + Enterinput 。 所以在第二季度,你将这个公式粘贴到公式栏中,而不是按Enter键,而是按下Ctrl + Shift + Enter。 我从这里借用了这个公式。你可以看看这个网站,看看这个公式是如何工作的。

现在,在单元格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 + Enterinput 。 确保你已经完成了上述所有步骤

现在从J2到Q2中select单元格,复制它们并根据需要粘贴它们。 在示例截图中,这将是行号5(涵盖所有可能性)。

你终于有了你需要的桌子。 您现在可以使用简单的“等于”关系将此表链接到其他地方。 另外,如果您愿意的话,您可以从数据表中隐藏所有这些额外的列。

呼! 我真的希望能解决你的问题! 所有这些努力,我认为我应该得到一个轻拍! 希望能帮助到你! 🙂

将4个新列( FI )添加到工作表并input以下公式:( 假设有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 

(向下拖动以将公式展开到所有行)

它应该是这样的:

 ABCDEFGHI 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 

结果是:

 ABCDEFGHI 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上input以下内容:

 ABCDE =Sheet1!F1 =Sheet1!B1 =Sheet1!C1 =Sheet1!D1 =Sheet1!I1 =Sheet1!F2 =Sheet1!B2 =Sheet1!C2 =Sheet1!D2 =Sheet1!I2 ... 

结果是:

 ABCDE 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

  • 将列A 的格式更改为“自定义”/ mmmm yyyy ,以便显示date(即April 2012而不是April 2012

  • 最后但并非最不重要的: 使用Excel的高级filter来摆脱重复。