Map column data to matching rows

强颜欢笑 提交于 2019-12-08 05:53:51

问题


I have a sheet like this:

| 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|
---------------------------------

I want the sheet to become like this:

| 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 and Col G have letters which are unique, and in the col next to it it has weights.

To make it even more clear,

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

are the weights of a,b,c... in January

Similarly | D | E | are weights of a,b,c... in July and | G | H | are weights of a,b,c... in December

I need to put them side-by-side for comparison, the thing is they are NOT in order.

How do I approach this?

UPDATE

There are thousands of a,b,c, aa, bb, cc, aaa, avb, as, saf, sfa etc.. and some of them MAY be present in January (Col A) and not in July (Col D)


回答1:


Something like this

code

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

Explanation of first line

 Application.Index([E1:E5], Evaluate("IF(A1:A5<>"""",MATCH(A1:A5,D1:D5,0),A1:A5)"), 1)
  • The MATCH returns a VBA array matching the positions (5) of A1:A5 against D1:D5
  • INDEX then returns the corresponding values from E1:E5

So to use the key column of A1:A100 against M1:100 with values in N1:100

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



回答2:


Extend as necessary: Sort D:E by D ascending, sort G:H by G ascending, delete G,F,D,C. If you want VBA, do this with Record Macro selected.



来源:https://stackoverflow.com/questions/17402178/map-column-data-to-matching-rows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!