将一些具有ID字段的列“转置”为行,同时复制其他数据

时间:2015-08-27 15:03:58

标签: vba ms-access-2007 excel-2007 data-manipulation

假设我在Excel中继承了一个处理进程和个体的表,这些表(在数千个其他行中)与此类似。

ID             | Name        | Quality1   | Quality2   | ... | QualityN   |
...
234,014,828,423  James         Low          Hot           .    Blue
212,552,211      Mark          Low          Cold          .    Red
845              Amy           High         Hot           .    White
...

我打算稍后在Access中使用这些数据作为参考表,其中每个ID号都是不同的,并且有数据可以与之一起使用。第一步显然是使用Excel中的文本到列工具来细分ID类别。这让我们看起来像这样。

ID |   |   |   | Name        | Quality1   | Quality2   | ... | QualityN   |
... 
234 014 828 423  James         Low          Hot           .    Blue
212 552 211      Mark          Low          Cold          .    Red
845              Amy           High         Hot           .    White
...

然而下一部分让我陷入困境。什么是所需的过程(仅使用Excel,Access和相关的VBA),这使我能够得到我想要的结果?

ID             | Name        | Quality1   | Quality2   | ... | QualityN   |
... 
234              James         Low          Hot           .    Blue
014              James         Low          Hot           .    Blue
828              James         Low          Hot           .    Blue
423              James         Low          Hot           .    Blue
212              Mark          Low          Cold          .    Red
552              Mark          Low          Cold          .    Red
211              Mark          Low          Cold          .    Red
845              Amy           High         Hot           .    White
...

我的直觉告诉我在Access中使用一个数字表,范围从0到9999然后再到JOIN数据,但这是代码和时间密集的,以及令人难以置信的野蛮和僵化。有没有更优雅的方法来制作我的解决方案?

1 个答案:

答案 0 :(得分:1)

如果您想在使用Excel之前使用Excel执行此操作,那么抓取数据并放入另一个工作表的简单嵌套for循环怎么办?

这个小功能就是这样做的:

In [19]: re.sub(r'\b(\w+)\b', lambda x: x.groups()[0].capitalize(), "3rd sparta this.is1", re.UNICODE)
Out[19]: '3rd Sparta This.Is1'