使用选项将多个excel合并到单个工作表

时间:2015-12-29 23:15:33

标签: excel vba excel-vba

我在一个excel文件中有2张,第一张是:

工作表:人

Code    date        start   end
2301    12/08/1993  08:02   08:17
4221    12/08/1993  09:04   09:25
2312    12/08/1993  10:02   10:28
1284    19/09/1994  11:02   11:21
2312    19/09/1994  15:57   16:20
1284    23/06/1995  17:12   17:35
2312    22/06/1996  13:14   13:32
4221    22/06/1996  15:53   16:13
4221    05/05/1999  08:06   08:22
2418    05/05/1999  08:10   08:33
2301    05/05/1999  09:12   09:37
2301    05/05/1999  09:28   10:28
2301    05/05/1999  13:28   13:38

是公司的人员列表,其中任何人都是通过徽章[行Code]标识的,我希望通过code将数据合并到一个人的服装表中,例如,对于拥有多个徽章2301的人,他有自己的名为B2301的表,所以根据第一张“人物”,我希望导入一个人的导入数据,例如按此人的code个数分组:

表B2301

 date       Period(min)
 12/08/1987 12
 ....       ...

因此,时间段将从startend行计算。

我尝试使用这个公式,但它对我不起作用:

=IFERROR(INDEX(Sheet1!A$2:A$14,SMALL(IF(Sheet1!$A$2:$A$14=INT(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))),ROW(Sheet1!A$2:A$14)-ROW(Sheet1!A$2)+1),ROWS(Sheet1!A$2:A2))),"")

任何想法?

2 个答案:

答案 0 :(得分:0)

这需要您进行大量研究。您需要:

  1. 创建VBA宏
  2. 定义变量并创建一个循环来查看主表。
  3. 根据代码创建工作表名称。
  4. 检查工作表是否已存在,如果不存在,则创建工作表。
  5. 将第一张表格中的值复制到"代码"片材。
  6. 处理完所有值后,浏览每个工作表,循环显示您的值并计算您的期间。
  7. 这不是一个微不足道的代码。研究这6个项目并编写代码。当你拥有它,显示它,我们可以给你更多的方向。

答案 1 :(得分:0)

要填充日期,请在A2中填写:

=IFERROR(INDEX(Sheet1!$B$2:$B$14,MATCH(SMALL(IF(--MID(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255),2,999) = Sheet1!$A$2:$A$14,Sheet1!$B$2:$B$14),ROW()-1),IF(--MID(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255),2,999) = Sheet1!$A$2:$A$14,Sheet1!$B$2:$B$14),0)),"")

要填充时间段,请将其放入B2:

=IFERROR(TEXT(INDEX(Sheet1!$D$2:$D$14,MATCH(SMALL(IF(--MID(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255),2,999) = Sheet1!$A$2:$A$14,IF(Sheet1!$B$2:$B$14=A2,Sheet1!$C$2:$C$14)),COUNTIF($A$1:$A2,A2)),IF(--MID(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255),2,999) = Sheet1!$A$2:$A$14,IF(Sheet1!$B$2:$B$14=A2,Sheet1!$C$2:$C$14)),0))-INDEX(Sheet1!$C$2:$C$14,MATCH(SMALL(IF(--MID(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255),2,999) = Sheet1!$A$2:$A$14,IF(Sheet1!$B$2:$B$14=A2,Sheet1!$C$2:$C$14)),COUNTIF($A$1:$A2,A2)),IF(--MID(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255),2,999) = Sheet1!$A$2:$A$14,IF(Sheet1!$B$2:$B$14=A2,Sheet1!$C$2:$C$14)),0)),"[m]"),"")

两者都是数组公式,需要使用Ctrl-Shift-Enter确认。然后将两者复制到所需的行。

enter image description here