Есть exel файл отчета. Столбцы: порядковый номер, домен, заголовок, дата, ссылка на статью. Нужно выбрать строки с одинаковыми доменами и датами и оставить не больше 5 штук. (лишнее удалить).
Поясню, допустим есть по 10 строк с одинаковыми датами+доменами. И таких 10 по 10 строк . (в качестве примера скажу так) 100 строк всего
надо, чтобы волшебным образом (фильтр, макрос или еще что-то), удалились 50 строк, и осталось 50 строк, 10 по 5 (5 строк с одинаковыми датами+доменами)
ps в реальном файле отчета свыше 2 тыс строк, там могут быть меньше и больше 5 строк с одинаковыми дата+домен , вот что больше нужно удалить, не больше 5 строк
veris написал: надо, чтобы волшебным образом (фильтр, макрос или еще что-то), удалились 50 строк, и осталось 50 строк, 10 по 5 (5 строк с одинаковыми датами+доменами)
Цитата
veris написал: там могут быть меньше и больше 5 строк с одинаковыми дата+домен , вот что больше нужно удалить, не больше 5 строк
??? А если понадобится и нужно будет 6 или 8? Лучше расскажите, не сколько строк Вы хотите удалить, а что именно нужно сделать P.S. Попробуйте использовать стандартный фильтр, тогда может и задача (или объяснение задачи) станет понятней
У 6-и строк совпадает домен site1.ru и дата 09.02.2021 , 6-ую нужно удалить, не руками , автоматически только 5 оставлять
возможно ли это сделать в Exel? Макросом?
ps в реальном файле отчета более 2 тыс. строк, разные домены, разные даты, нужно именно искать, чтобы одинаковые были у строк домен и дата и удалять, если больше 5 таких
вот у 6 строк совпадает домен site1.ru и дата 09.02.2021 , 6-ую удалить нужно, не руками , автоматически
Цитата
veris написал: реальном файле отчета свыше 2 тыс строк, там могут быть меньше и больше 5 строк с одинаковыми дата+домен , вот что больше нужно удалить, не больше 5 строк
veris, все равно ничего непонятно из Ваших объяснений. Нужно удалить строки с конкретным именем домена? Или с конкретным именем домена + одинаковая дата? Или удалить не больше пяти строк в файле с 2000 строками? Или в фале с 2000 строками удалить
Цитата
veris написал: могут быть меньше и больше 5 строк с одинаковыми дата+домен , вот что больше нужно удалить, не больше 5 строк
Вы понимаете, что в примере 6 строк с одинаковыми домен+дата (именно оба должны совпадать)? Нужно оставить 5 таких (!) строк, 6ую удалить, если было бы 25 таких строк. то удалить 20, оставить 5. автоматически, не вручную
а теперь представьте, что есть еще строки с другими доменами+датами (например 10 строк с одинаковым доменом site2.ru и датой 10.10.2020), их тоже нужно по 5 оставить, остальные удалить, очередность тут неважна и какие именно строки тоже, просто оставить любые 5 строк с одинаковыми доменом+датой, остальные удалить
ну например из 2000 строк должно остаться 1500 строк например, после применения макроса или даже не знаю чего, так как мне никто не может сказать может ли Exel такое и как
задача: вычистить файл отчета, за одну дату с одного домена должно остаться не больше 5 записей(строк)
Sub mrshkei()
Dim cell As Range, i As Long, lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
x = Application.WorksheetFunction.CountIfs(Range("B1:B" & i), Cells(i, 2), Range("D1:D" & i), CLng(Cells(i, 4)))
If x > 5 Then
If cell Is Nothing Then
Set cell = Cells(i, 2)
Else
Set cell = Union(cell, Cells(i, 2))
End If
End If
Next i
If Not cell Is Nothing Then cell.EntireRow.Delete
End Sub
veris написал: за одну дату с одного домена должно остаться не больше 5 записей(строк)
Вот так и нужно было объяснить сразу Добавлю и свой вариант:
Код
Sub Del_six()
Dim r&
Application.ScreenUpdating = False
For r = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
Cells(r, 9).FormulaR1C1 = "=COUNTIFS(C[-7],RC[-7],C[-5],RC[-5])"
If Cells(r, 9) > 5 Then
Rows(r).Delete
End If
Next r
Application.ScreenUpdating = True
End Sub
Все варианты протестировал на реальном отчете. Результаты у всех идентичные! Обалдеть Единственное, с макросами не понимаю как адаптировать под реальный отчет, ибо там столбцов чуть больше. Но это не проблема, лишние столбцы убрал и всё заработало. Но проще наверное и удобнее использовать вариант БМВ
veris написал: почему нельзя отменить выполнения макроса?
1.Можно файл сразу после выполнения макроса закрыть без сохранения и все вернется к исходному виду. 2.Добавить в макрос одну строчку - создать копию исходного листа и Ваши исходные данные сохранятся (или так же в макросе добавить создание копии файла). 3.См. #14
мой макрос (из сообщения №9) должен работать с любым количеством столбцов таблицы, так же он выгружает конечный результат на новый лист, т.е. ваши старые данные не изменяются
let
Source = Table.Group(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], {"Домен", "Дата"}, {"q", each Table.FirstN(_, 5)}),
a = Table.Combine(Source[q])
in
a