如何将来自多个列的数据合并到一个列组中

时间:2018-12-29 16:58:37

标签: excel vba excel-vba excel-formula

我有一个工作表,它从每周时间表工作簿中收集数据。每个工作簿中都有一个单元格,可将我需要传输的所有数据提取到一个单元格中。数据来自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可能会有更多行。

如果有所作为,我也可以进行其他提取。

1 个答案:

答案 0 :(得分:0)

如果您每天只这样做几次,请执行以下操作:

在另一个标签页中 =Sheet1!A1将公式拖动到许多员工上,然后向下拖动29行。然后将=Sheet1!B1拖放到29行等上。

初始设置将花费很长时间,但只需设置一次。要添加行,您可以插入一行,也可以将它们添加到列的底部(取决于顺序是否重要)。

然后,您可以将粘贴的值复制到该列的数据中,并删除重复项。

对于大多数Excel用户而言,这在直观上很简单,因此非常适合移交给其他人。

如果您每天需要多次执行此操作,那么VBA可能是一个很好的解决方案。我可以给您一个代码“草图”以帮助您入门,但是您需要首先尝试自己编写。

相关问题