我在确定这个问题时遇到了麻烦,我认为用例子可以更好地解释。我不是一个非常有经验的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中的数据转移到各个日期工作表。我相信,每小时/每天的员工数量不同会使这很困难。这里有没有人对如何实现这一点有任何想法?
另外,如果有任何问题,请告诉我。
答案 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。
以下是一些屏幕截图:
示例数据:
<强>输出:强>
当然,这只是基本前提。如果工作表中有多个日期,则只需进一步操作此公式即可。在我的头顶,找到正确的日期并添加正确的偏移量也可以。
如果这有用,或者VBA或Pivot选项看起来最好,请告诉我们。