将列数据映射到匹配的行

时间:2013-07-01 10:23:01

标签: excel vba excel-vba excel-2010

我有一张这样的表:

| 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 |七月中a,b,c ...的权重,而| G | H |中a,b,c ...的权重腊

我需要将它们并排放置以进行比较,事情是它们不是有序的。

我该如何处理?

更新

有成千上万的a,b,c,aa,bb,cc,aaa,avb,as,saf,sfa等......其中一些可能出现在1月份(Col A)而不是7月份(Col D)

2 个答案:

答案 0 :(得分:1)

像这样的东西

<强>码

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返回与A1:A5的位置(5)匹配的D1:D5
  • 的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)

答案 1 :(得分:0)

根据需要进行扩展:按D升序排序D:E,按G升序排序G:H,删除G,F,D,C。如果您想要VBA,请选择“录制宏”。