我有一个工作表,它从每周时间表工作簿中收集数据。每个工作簿中都有一个单元格,可将我需要传输的所有数据提取到一个单元格中。数据来自29列乘29行,但是最终可能会增长。每行代表一个工作单(WO)的数据,包括WO#,人工成本($)和从事该工作的雇员列表(E#)。
然后打开此单元格并将其提取到单行数据中。原始数据中29行中的每行29列。这意味着29 x 29列。
WO1 $10 E1 E2 E3 E4 WO8 $10 E1 E2 E3 E4
WO2 $15 E1 E2 WO3 $15 E1 E2
WO3 $20 E1 E2 E3 WO9 $20 E1 E2 E3
WO4 $25 E1 E2 E3 E4 WO5 $25 E1 E2 E3 E4
WO5 $30 E1 E2 WO10 $30 E1 E2
WO6 $35 E1 E2 E3 E4 WO11 $35 E1 E2 E3 E4
WO7 $40 E1 E2 E3 WO1 $40 E1 E2 E3
我想创建一个列表,该列表将每个WO的所有数据合并到一个29列宽841行的单个列表中。某些工作可能跨越1个星期,并且可能有多行数据,因此此时可能有重复的WO。
WO1 $10 E1 E2 E3 E4
WO2 $15 E1 E2
WO3 $20 E1 E2 E3
WO4 $25 E1 E2 E3 E4
WO5 $30 E1 E2
WO6 $35 E1 E2 E3 E4
WO7 $40 E1 E2 E3
WO8 $10 E1 E2 E3 E4
WO3 $15 E1 E2
WO9 $20 E1 E2 E3
WO5 $25 E1 E2 E3 E4
WO10 $30 E1 E2
WO11 $35 E1 E2 E3 E4
WO1 $40 E1 E2 E3
我当时在想,如果我可以将每个WO和相关数据放入一个列表中,那么我可以创建一个WO和其他excel魔术的唯一列表来优化列表以实现所需。我认为这部分我可以处理。对我来说,挑战在于将所有内容放在单个列表的首位。
我尝试了以下代码:Excel - Combine multiple columns into one column
=IF(ROW()<=COUNTA(A:A),INDEX(A:A,ROW()),IF(ROW()<=COUNTA(A:B),INDEX(B:B,ROW()-COUNTA(A:A)),IF(ROW()>COUNTA(A:C),"",INDEX(C:C,ROW()-COUNTA(A:B)))))
但这将需要29个嵌套的if语句,并且必须将所有数据重新分组,以便所有相应的单元格彼此相邻。
我更喜欢使用公式,但是如果那是最好的方法,则将使用VBA。
如果感兴趣,这是该文件的示例版本: https://www.dropbox.com/s/58iex17wx3wuvug/stackoverflowsample.xlsx?dl=0
前30列是我开始使用上述公式的努力。
我可能会减少原始列的数量,因为即使不是不可能,如果有10-15名以上的员工从事同一工作的可能性很小,但这恰好是我最初允许的列数。如果有好处,可以更改。不过,WO可能会有更多行。
如果有所作为,我也可以进行其他提取。
答案 0 :(得分:0)
如果您每天只这样做几次,请执行以下操作:
在另一个标签页中
=Sheet1!A1
将公式拖动到许多员工上,然后向下拖动29行。然后将=Sheet1!B1
拖放到29行等上。
初始设置将花费很长时间,但只需设置一次。要添加行,您可以插入一行,也可以将它们添加到列的底部(取决于顺序是否重要)。
然后,您可以将粘贴的值复制到该列的数据中,并删除重复项。
对于大多数Excel用户而言,这在直观上很简单,因此非常适合移交给其他人。
如果您每天需要多次执行此操作,那么VBA可能是一个很好的解决方案。我可以给您一个代码“草图”以帮助您入门,但是您需要首先尝试自己编写。