【问题标题】:How to consolidate data from multiple columns into a single column group如何将多个列中的数据合并到一个列组中
【发布时间】:2019-05-27 01:06:51
【问题描述】:

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

如果有区别的话,我也可以提取不同的东西。

【问题讨论】:

  • 你认为行数会经常变化吗?还是它们可能只是偶尔改变?我有一个解决方案,但是如果行经常更改,它将不起作用。 (此外,它仍然需要一些手动步骤,但应该会大大减少手动工作。如果您想要转换超过 30 个文档,您将需要使用某种 VBA 方法。)
  • 我不希望行经常更改。我的目标是让它尽可能自动化和简单,这样一个技能很少的人就可以通过一点指导来管理它。我也将电源查询视为一种选择,但仍在学习它。我会欢迎你的建议@Emily Alden。

标签: excel vba excel-formula


【解决方案1】:

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

在不同的标签放 =Sheet1!A1 将公式拖到许多员工上,然后将其向下拖 29 行。然后把=Sheet1!B1拖过去拖下来29行等。

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

然后,您可以将该数据列的粘贴值复制到您想要的任何位置并删除重复项。

这对于大多数 Excel 用户来说直观简单易懂,因此非常适合移交给其他人。

如果您需要每天多次执行此操作,那么 VBA 可能是一个不错的解决方案。我可以给你一个代码'草图'来帮助你开始,但你需要先尝试自己编写它。

【讨论】:

  • 这是一个比较简单的解决方案。谢谢@Emily Alden。不完全是我所希望的,但可能是最好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 2018-09-29
  • 2021-09-12
  • 1970-01-01
  • 2020-02-02
  • 2019-03-14
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多