Копирование определенных данных с одного листа на другой

2 столбца на мастер-листе:

col1      col2
Apple     Fruit
Spinach   Veg
Orange    Fruit
Potatoe   Veg   
Pear      Fruit
Bannana   Fruit
Carrot    Veg
Potataoe  Veg

Скажем, я хотел скопировать все данные Fruit на другой лист и все данные Veg на 3-й лист. Есть ли способ сделать это? Это требует макроса или можно как-то сделать VLOOKUP?

Также мне нужно, чтобы это было динамическим, поэтому, если добавляется новая строка, соответствующие листы обновляются.


person davey    schedule 17.10.2012    source источник
comment
Просто автоматически отфильтруйте столбцы для Fruit — скопируйте отфильтрованные записи на лист 2, затем повторите для Veg.   -  person brettdj    schedule 17.10.2012
comment
Извините, я хочу, чтобы это было динамически, поэтому, если будет добавлена ​​новая строка, она появится на других листах.   -  person davey    schedule 17.10.2012
comment
Попробуйте «Записать макрос», включите фильтр, скопируйте оставшиеся данные на новый лист, остановите запись. С этим кодом вы сможете начать работу ;)   -  person CustomX    schedule 17.10.2012
comment
Я просто быстро набрал их в качестве примера   -  person davey    schedule 19.10.2012


Ответы (3)


Вы могли бы использовать эту ужасную чудовищную формулу:

=INDEX($B$2:$B$9, SMALL(IF("veg"=$A$2:$A$9, ROW($A$2:$A$9)-MIN(ROW($A$2:$A$9))+1, ""), ROW(A1)))

Введите его как формулу массива с помощью Ctrl+Shift+Enter.

Формула ужасного чудовища

Я нашел формулу здесь: http://www.get-digital-help.com/2009/10/25/how-to-return-multiple-values-using-vlookup-in-excel/

Это может быть не лучшая версия или самая элегантная версия этой формулы (это обычная задача формулы), но она выполнит свою работу.

person Stepan1010    schedule 17.10.2012

Я бы использовал сводные таблицы (используя Excel 2007), но вам нужно будет обновлять каждый раз, когда исходный код изменяется/расширяется, и следить за диапазоном таблиц/данных: не останавливаясь ни перед какими дополнениями:

пример SO12932741

person pnuts    schedule 17.10.2012

  • щелкните правой кнопкой мыши вкладку листа
  • Посмотреть код
  • скопируйте и вставьте код ниже

всякий раз, когда столбец B изменяется, код

  1. Столбец AutoFilters B для «Фруктов», затем копирует записи на лист 2 столбца A: B
  2. Столбец AutoFilters B для "Veg", затем копирует записи в столбцы листа 2 A: B

Код

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set rng1 = Intersect([B:B], Target)
If rng1 Is Nothing Then Exit Sub
Set ws1 = Sheets(2)
Set ws2 = Sheets(3)
ws1.[A:B].ClearContents
ws2.[A:B].ClearContents
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
With ActiveSheet.Range("A:B")
.AutoFilter Field:=2, Criteria1:="Fruit"
.Copy ws1.[a1]
.AutoFilter Field:=2, Criteria1:="Veg"
.Copy ws2.[a1]
End With
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True
End Sub
person brettdj    schedule 18.10.2012