5

У меня есть это:

  -----A-----|-----B-----|-----C-----
1|cherry     |apple      |banana
2|kiwi       |banana     |cantaloupe
3|peach      |grape      |peach
4|           |peach      |watermelon
5|           |strawberry |

Я хотел бы это:

  -----A-----|-----B-----|-----C-----
1|           |apple      |
2|           |banana     |banana
3|           |           |cantaloupe
4|cherry     |           |
5|           |grape      |
6|kiwi       |           |
7|peach      |peach      |peach
8|           |strawberry |
9|           |           |watermelon

По сути, расширяйте каждый столбец в соответствии с тем, что находится в столбце, и сопоставляйте подобные элементы в отдельной строке. (Предположим, что каждый столбец отсортирован.)

Я делал это вручную, играя шеф-повара Джинсу, но мне было интересно, есть ли автоматизированный способ? (У меня есть Excel 2007, но скоро я получу Excel 2010).

В качестве альтернативы, есть ли другой инструмент лучше, чем Excel для этой цели?

Спасибо за ваше время.

2 ответа2

4

VBA не является необходимым. Создайте список всех экземпляров (скажем, в ColumnD есть строки: яблоко, банан, дыня, вишня, виноград, киви, персик, клубника, арбуз), затем вставьте =IF(ISERROR(INDEX(A$1:A$5,MATCH($D1,A$1:A$5,0))),"",INDEX(A$1:A$5,MATCH($D1,A$1:A$5,0))) в E1. Перетащите нижний правый угол от E1 до G1. Дважды щелкните по нижнему правому углу G1. Копировать / Вставить значения. Удалить столбцы A: D.

1

Псевдокод пока идет спать, но вы могли бы сделать это с помощью некоторого VBA, подобного приведенному ниже.

Получите «использованный диапазон» для листа, используя

Dim oSH As Worksheet
Set oSH = ActiveWorkbook.Sheets("MySheetWithList")
Dim data As range
Set data = oSH.UsedRange

Затем выполните итерации по значениям для столбцов A:C в каждой строке в используемом диапазоне, вырезая и вставляя их при сопоставлении значений.

    i = 2

While (i < data.Rows.Count)
    A = oSH.range("A" & i).Value2
    B = oSH.range("B" & i).Value2
    C = oSH.range("C" & i).Value2

    If (A = B) Then
     [Move the cells down in columns B and C and reset used range]
    Else
     [Perform the other checks on same row]
    End If

    i = i + 1
Wend

и т.п.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .