将列数据映射到匹配的行

我有一个这样的表单:

| A | B | C | D | E | F | G | H | ... --------------------------------- | a | 1 | | b | 2 | | c | 7 | --------------------------------- | b | 2 | | c | 8 | | b | 4 | --------------------------------- | c |289| | a | 3 | | a |118| --------------------------------- | d | 6 | | e | 3 | | e |888| --------------------------------- | e | 8 | | d |111| | d |553| --------------------------------- 

我希望工作表变成这样:

 | A | B | C | D | E | F | G | H | ... --------------------------------- | a | 1 | 3 |118| | | | | --------------------------------- | b | 2 | 2 | 4 | | | | | --------------------------------- | c |289| 8 | 7 | | | | | --------------------------------- | d | 6 |111|553| | | | | --------------------------------- | e | 8 | 3 |888| | | | | --------------------------------- 

Col A,Col B和Col G有独特的字母,而在旁边的col里有重量。

为了更清楚,

 | A | B | --------- | a | 1 | --------- | b | 2 | --------- | c |289| ... 

1月份的a,b,c …的重量

同样| D | E | | D | E |7月份的a,b,c …的权重和| G | H | | G | H |十二月是a,b,c …的权重

我需要把它们放在一起比较,事情是他们不是为了。

我如何处理这个?

UPDATE

有数以千计的a,b,c,aa,bb,cc,aaa,avb,as,saf,sfa等等,其中一些可能在1月份(A组)而不是在7月份(Col D)

像这样的东西

 Sub Squeeze() [c1:c5] = Application.Index([E1:E5], Evaluate("IF(A1:A5<>"""",MATCH(A1:A5,D1:D5,0),A1:A5)"), 1) [d1:d5] = Application.Index([H1:h5], Evaluate("IF(A1:A5<>"""",MATCH(A1:A5,G1:G5,0),A1:A5)"), 1) [e1:h5].ClearContents End Sub 

第一行的解释

  Application.Index([E1:E5], Evaluate("IF(A1:A5<>"""",MATCH(A1:A5,D1:D5,0),A1:A5)"), 1) 
  • MATCH返回与D1:D5匹配的A1:A5的位置(5)的VBA数组
  • INDEX然后从E1:E5返回相应的值

因此,要使用A1:A100的关键列与M1:100的值为N1:100

 Application.Index([N1:N100], Evaluate("IF(A1:A100<>"""",MATCH(A1:A100,M1:M100,0),A1:A100)"), 1) 

按需要扩展:按D升序排列D:E,按G升序sortingG:H,删除G,F,D,C。 如果您想要VBA,请select“loggingmacros”。