全部!
我对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 |
+-----------+------------------------+--------+
任何帮助都将不胜感激! :)
答案 0 :(得分:1)
使用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
答案 1 :(得分:0)
您不需要VBA。
添加一个助手列,也许名为“ Count”
D2: =COUNTIF($C$2:C2,C2)
然后填写。
然后使用计数<=3
您还可以对列表进行排序,以将所有动物聚集在一起。