2013-07-01 3 views
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 А, Col В и Col G имеют буквы, уникальны, а рядом с ним он имеет вес.

Чтобы сделать это еще более ясным,

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

являются веса а, б, в ... в января

Аналогично | D | E | являются веса а, Ь, с .. . в июля и | G | H | являются весами а, б, в ... в декабря

мне нужно поставить их бок о бок ф или сравнения, дело в том, что они НЕ в порядке.

Как подойти к этому?

ОБНОВЛЕНИЕ

Есть тысячи A, B, C, AA, BB, CC, AAA, AVB, как, SAF, SFA и т.д .., и некоторые из них могут присутствовать в январе (Col A), а не в июле (Col D)

ответ

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) 
  • The MATCH возвращает массив VBA, соответствующие позиции (5) A1:A5 против D1:D5
  • INDEX затем возвращает соответствующие значения из E1:E5

Таким образом, чтобы использовать ключ столбец A1: A100 против М1: 100 со значениями в N1: 100

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

О, Боже, ты в этом гениальна! – ComputerFellow

+0

Главный кредит принадлежит джентльмену по имени Рори Арчибальд, который сначала показал мне трюк «Evaluate». – brettdj

0

При необходимости продлить: Сортировка D: E по возрастанию D, сортировать G: H по G по возрастанию, удалить G, F, D, C. Если вы хотите VBA, сделайте это с выбранным макросом записи.

+1

есть тысячи a, b, c, aa, bb, cc, aaa, avb, as, saf, sfa и т. д., и некоторые из них МОГУТ присутствовать в январе (Col A), а не в июле (Col D) - Сортировка выиграла 't дать мне необходимый результат :( – ComputerFellow

+0

Лучше всего включить разъяснение в e оригинальный вопрос. – pnuts