Нужно ограничить дубликаты, но не удалять - PullRequest
0 голосов
/ 09 февраля 2019

Все!

У меня есть некоторый опыт работы с JS и Python, но я относительно новичок в VBA.На данный момент я написал несколько успешных сценариев, в том числе:

1) найдите значения в столбце, в котором я хочу, чтобы все ячейки были нулевыми, и как только указанные ячейки были найдены, удалите всю строку (и) вокругони

2) находят пустые значения в столбце, где мне нужны строки, и заменяют указанные пустые значения на строку

3) находят дубликаты и удаляют их

теперь, что я хочусделать, это немного похоже на 3), но более сложный.Я хочу искать дубликаты в столбце, и вместо того, чтобы удалять все дубликаты и оставлять один, я хотел бы написать скрипт (ы), который находит дубликаты и сохраняет 3, 5, 10 или 20 дубликатов.Вот упрощенная таблица моей задачи:

+-----------+------------------------+--------+
|   Name    |         Email          | Animal |
+-----------+------------------------+--------+
| Lauretta  | Lauretta@barnyard.com  | Pig    |
| Irwin     | Irwin@barnyard.com     | Cat    |
| Leigh     | Leigh@barnyard.com     | Donkey |
| Eloy      | Eloy@barnyard.com      | Horse  |
| Elaina    | Elaina@barnyard.com    | Spider |
| Trinity   | Trinity@barnyard.com   | Pig    |
| Kanisha   | Kanisha@barnyard.com   | Pig    |
| Minna     | Minna@barnyard.com     | Spider |
| Shantelle | Shantelle@barnyard.com | Cat    |
| Renea     | Renea@barnyard.com     | Cat    |
| Catherina | Catherina@barnyard.com | Spider |
| Jamika    | Jamika@barnyard.com    | Horse  |
| Delphine  | Delphine@barnyard.com  | Pig    |
| Kristian  | Kristian@barnyard.com  | Horse  |
| Arlie     | Arlie@barnyard.com     | Spider |
| Katelynn  | Katelynn@barnyard.com  | Pig    |
| Philip    | Philip@barnyard.com    | Pig    |
| Antonette | Antonette@barnyard.com | Cat    |
| Ellamae   | Ellamae@barnyard.com   | Spider |
+-----------+------------------------+--------+

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

Проблема : Как удалить дубликаты, но оставить 3 каждого животного, а не просто 1 ?В моей реальной жизни в базе данных контактов есть тысячи животных, а не только двадцать, и у меня также есть летучие мыши, козы, кролики и т. Д. И я также думаю об увеличении моего списка гостей в будущем, чтобы пригласить 5, 10или даже по 20 на каждого животного.

Требуемый готовый продукт будет выглядеть примерно так (это может также включать сортировку - сортировка также не является нарушителем):

+-----------+------------------------+--------+
|   Name    |         Email          | Animal |
+-----------+------------------------+--------+
| Lauretta  | Lauretta@barnyard.com  | Pig    |
| Kanisha   | Kanisha@barnyard.com   | Pig    |
| Katelynn  | Katelynn@barnyard.com  | Pig    |
| Irwin     | Irwin@barnyard.com     | Cat    |
| Renea     | Renea@barnyard.com     | Cat    |
| Antonette | Antonette@barnyard.com | Cat    |
| Leigh     | Leigh@barnyard.com     | Donkey |
| Eloy      | Eloy@barnyard.com      | Horse  |
| Jamika    | Jamika@barnyard.com    | Horse  |
| Kristian  | Kristian@barnyard.com  | Horse  |
| Elaina    | Elaina@barnyard.com    | Spider |
| Catherina | Catherina@barnyard.com | Spider |
| Ellamae   | Ellamae@barnyard.com   | Spider |
+-----------+------------------------+--------+

Любая помощь вообщебудет очень ценится!:)

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вам не нужен VBA.

Добавьте вспомогательный столбец, возможно, с именем «Count»

D2:  =COUNTIF($C$2:C2,C2)

и заполните его.

Затем отфильтруйте с помощью Count <=3

Вы также можете отсортировать список, чтобы собрать всех животных вместе.

0 голосов
/ 09 февраля 2019

Используйте COUNTIF для определения номера.Работайте снизу вверх и удаляйте каждый раз, когда текущее число превышает статический максимум.

with worksheets("sheet1")

    dim i as long mx as long

    mx = 5   'set the maximum number of any animal

    for i=.cells(.rows.count, "C").end(xlup).row to mx step -1
        if application.countif(.range("C:C"), .cells(i, "C")) > mx then
            .cells(i, "C").entirerow.delete
        end if
    next i

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