将列数据映射到匹配的行
我有一个这样的表单:
| 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”。