не копировать (игнорировать), когда ячейка содержит определенный текст - PullRequest
2 голосов
/ 19 сентября 2019

У меня следующая ситуация.У меня есть список элементов на Листе 1, и я хотел бы скопировать элементы на Лист2 и исключить определенные элементы.Предположим, у меня есть следующий список элементов на Листе 1:

sheet1

Я хотел бы оставить ячейку с грушей на Листе 2.Это должно оставить грушу (игнорировать) полностью.

Это должно выглядеть так

sheet2x

Я попробовал следующее, но это нене вернуть желаемые результаты.

= IF (Sheet1! B2 = "груша", "", не груша ")

формула, которую я использую только заменители (не заполняется) и выглядит следующим образом:

Есть идеи?Спасибо

sheet2

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Вы можете использовать формулу Excel ниже для этого, если вы хотите отказаться от использования VBA без необходимости.

=IFERROR(INDEX($A$2:$A$10,SMALL(IF(NOT($A$2:$A$10="Pear"),ROW($A$2:$A$10)-ROW(INDEX($A$2:$A$10,1,1))+1),ROWS($C$1:$C1))),"")

Результат как показано ниже

Example in excel

Вы можете заменить статическую "Грушу" в формуле значением ячейки, если хотите исключить любое другое слово.

0 голосов
/ 19 сентября 2019

Просто чтобы дать вам представление о том, как я буду пытаться решить этот код, вы можете увидеть ниже мое предложение, используя AdvancedFilter с приведенными ниже примерами данных:

enter image description here

Подготовьте второй лист со следующими данными:

enter image description here

В следующем коде будет использоваться AdvancedFilter, один из более быстрых способов фильтрации больших наборов данных (есть и другие методы, например AutoFilter):

Sub Transfer()

'Dim your variables
Dim rng1 As Range, rng2 As Range
Dim lr1 As Long, lr2 As Long

'Set ranges to work with
lr1 = Blad1.Cells(Blad1.Rows.Count, "A").End(xlUp).Row '*1
lr2 = Blad2.Cells(4, "A").End(xlDown).Row
Set rng1 = Blad1.Range("A1:B" & lr1)
Set rng2 = Blad2.Range("A1:B2")

'Prepare CopyToRange range for new dataset
Blad2.Range("A4:B" & lr2).Clear '*2

'Filter data towards sheet2
rng1.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rng2, CopyToRange:=Blad2.Range("A4")

End Sub

* 1 : В коде я использовал CodeName рабочего листа, так как при использовании прямых ссылок лучше всего сохранять код, указывающий на правильные места.Вы можете найти эти имена в проводнике проекта (см. Ниже), поэтому измените их соответственно в коде.

enter image description here

*2 : Используя AdvancedFilter, мы можем решить скопировать отфильтрованный диапазон в указанное место, в этом случае я решу поместить его под наш CriteriaRange, поэтому всегда ясно, при каких условияхТаблица извлечена из основных данных листа 1.

Вывод будет выглядеть следующим образом:

enter image description here

Теперь вы можетеизмените CriteriaRange, например <>apple и повторите код.Выход будет тогда

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...