根据单元格值将数据从一个工作表传输到下一个工作表

时间:2013-12-18 23:41:08

标签: excel excel-vba excel-2010 vba

我在确定这个问题时遇到了麻烦,我认为用例子可以更好地解释。我不是一个非常有经验的excel用户,但被要求弄清楚这一点。

工作表1(由软件提供)格式如下:

12/17/2013
Hour                  Delivered
00.00-00.59           
Employee 1            18
Employee 2            17
Total For Hour        35
01.00-01.59           
Employee 1            18
Employee 2            17
Employee 3            12
Total For Hour        47
... etc until hours 24.00-24.59

每小时每小时的员工人数不同,所以我不认为我可以简单地引用这些单元格。

我想将工作表1中的数据传输到的工作表基于日期,因此每天都有一个工作表。 (12/17工作表,12/18工作表等)

这是日期工作表的格式:

Employee       00.00-00.59  |   01.00-01.59  |  etc. until hours 24.00-24.59
Employee 1     18               18
Employee 2     17               17
Employee 3     12
Employee 4
Employee 5

所以基本上我需要将工作表1中的数据转移到各个日期工作表。我相信,每小时/每天的员工数量不同会使这很困难。这里有没有人对如何实现这一点有任何想法?

另外,如果有任何问题,请告诉我。

2 个答案:

答案 0 :(得分:1)

这应该可以在没有任何VB的情况下分两步进行。第一步是向工作表1添加更多列,以规范化数据。第二步是使用该规范化数据创建数据透视表。

通过“规范化”,我的意思是在工作表1中为日期,小时,员工添加列,并使用从现有列A和B中复制值的公式进行交付。如果您需要更多帮助,请告诉我。

编辑:添加详细信息......

假设工作表1具有您在A列和B列中指示的值,并且您希望列D中的小时。假设第1行只包含列标题。将第2行留空。 col D中的公式需要说“如果col A中的值看起来像一个小时,那么复制它,否则重复上面一行中的小时。”确定工作表1中的行是否为小时的一种简单方法是在位置3中查找小数点。因此,将=IF(MID(A3,3,1)=".",A3,D2)放在单元格D3中并将该公式复制下来。

我确信您可以为Date,Employee和Delivered列构建类似的公式。

可能在公式中添加一个条件,说“如果col A中的值以'Total'开头,则将单元格保留为空”。

答案 1 :(得分:0)

如果没有大量数据,并且设置正是您在上面显示的方式,那么一个简单的公式就可以解决这个问题。

假设我的原始导出位于工作表Base中,单元格A1和我的预期输出从工作表Output开始,单元格A1,您可以在单元格上使用此公式B2

=IF(INDEX(Base!$A:$A,MATCH(B$1,Base!$A:$A,0)+ROW(1:1),0)=$A2,OFFSET(INDEX(Base!$A:$A,MATCH(B$1,Base!$A:$A,0)+ROW(1:1),0),0,1),0)

前提很简单。它使用INDEX + MATCH找到正确的小时,​​然后OFFSET找到正确的ROW个小时。当然,这假设您的员工在每小时都在同一个位置(即员工1总是低于一小时的一(1)行,员工2总是下面两(2)行等)。我们还会检查员工姓名是否匹配,以便在员工不在的情况下返回0。

以下是一些屏幕截图:

示例数据:

enter image description here

<强>输出:

enter image description here

当然,这只是基本前提。如果工作表中有多个日期,则只需进一步操作此公式即可。在我的头顶,找到正确的日期并添加正确的偏移量也可以。

如果这有用,或者VBA或Pivot选项看起来最好,请告诉我们。