1

我有一张这样的表:

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

是 a,b,c... 一月份的权重

同样| D | E |是 a,b,c... 在7 月的权重和| G | H |a,b,c... 在12 月的权重

我需要将它们并排放置以进行比较,问题是它们不按顺序排列。

我该如何处理?

更新

有数千个 a、b、c、aa、bb、cc、aaa、avb、as、saf、sfa 等。其中一些可能出现在 1 月(Col A)而不是 7 月(Col D)

4

2 回答 2

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的位置(5)匹配的VBA数组A1:A5D1:D5
  • 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)
于 2013-07-01T12:06:30.710 回答
0

根据需要扩展:D:E 按 D 升序排序,G:H 按 G 升序排序,删除 G,F,D,C。如果您需要 VBA,请在选中录制宏的情况下执行此操作。

于 2013-07-01T11:08:45.400 回答