Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2016 - Отфильтровать ненужную информацию в Excel

Ответить
Настройки темы
2016 - Отфильтровать ненужную информацию в Excel

Аватара для Swit0

Старожил


Сообщения: 150
Благодарности: 4


Конфигурация

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: xls test.xls
(85.0 Kb, 2 просмотров)
Здравствуйте! Возникла потребность в приложенном .xls документе сделать фильтрацию какого плана: например, от слов "ООО ЗСТ" до "Всего по: ООО ЗСТ" выделить строки и удалить их. Дело в том, что вручную удалить по всему документу очень долго, а документов таких множество, я ищу какое то средство автоматизации. Версия Excel 2016. Как это можно сделать ? Заранее спасибо!

Отправлено: 10:19, 16-02-2018

 

Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата Swit0:
например, от слов "ООО ЗСТ" до "Всего по: ООО ЗСТ" выделить строки »
Попробуйте код ниже - он найдет две указанные ячейки и выделит все строчки между ними, после этого вы можете убедиться, что диапазон действительно можно удалять и легко можете удалить строки вручную, нажав сочетание контрол со знаком минус на доп клавиатуре (соответственно - нижняя левая и дальняя правая клавиши).
Скрытый текст
Код: Выделить весь код
Public Sub selection_for_deleting()
    Dim rngStart As Range, rngEnd As Range
    Dim strStart As String, strEnd As String
    strStart = InputBox("Введите верхнюю строчку", "Поиск", "ООО ЗСТ")
    strEnd = InputBox("Введите нижнюю строчку", "Поиск", "Всего по: ООО ЗСТ")
    Set rngStart = Cells.Find(What:=strStart, After:=ActiveSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    Set rngEnd = ActiveSheet.Cells.Find(What:=strEnd, After:=rngStart, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    Range(rngStart, rngEnd).EntireRow.Select
    Set rngStart = Nothing
    Set rngEnd = Nothing
    
End Sub

Цитата Swit0:
ручную удалить по всему документу очень долго »
Вероятно, так будет тоже не очень удобно, нужно помнить, что в ячейке именно ООО ЗСТ, а не скажем ООО "ЗСТ", а "Всего по: ООО ЗСТ" не будет записано "Итого по: ООО ЗСТ" или "Всего по : ООО ЗСТ" (в последнем случае перед двоеточием пробел).
Соответственно - поиск нужен по всей книге, или достаточно текущего листа?
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 16-02-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Swit0

Старожил


Сообщения: 150
Благодарности: 4

Профиль | Отправить PM | Цитировать


Цитата a_axe:
или достаточно текущего листа? »
Достаточно.

Цитата a_axe:
Попробуйте код ниже »
Я дико извиняюсь, мне с этим кодом сделать что? К своему позору, я не знаю.

Отправлено: 11:48, 16-02-2018 | #3


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


В экселе нажмите alt+f11, откроется окно редактора VBA. В левой части найдите thisworkbook, щелкните по нему два раза, чтобы открылось его содержимое (пустой белый лист). Скопируйте код туда (при копировании раскладка должна стоять русская, иначе латиница кириллица может потеряться) , щелкните курсором на любой строчке, после чего можно запустить из редактора по F5,, либо из Excel по alt+F8. К сожалению нет возможности сделать скриншот.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:00, 16-02-2018 | #4


Модератор


Moderator


Сообщения: 16830
Благодарности: 3245

Профиль | Сайт | Отправить PM | Цитировать


Цитата Swit0:
с этим кодом сделать что? »
Как вставить готовый макрос в рабочую книгу? - инструкция в картинках. Код - из темы

-------
При заполнении сведений о конфигурации компьютера не забудь поставить флажок: отображать - "Да"
-------------------------------------------------------------------------------------------
Ассоциация VirusNet - помощь и обучение борьбе с вирусами. Некоторые вопросы загрузки в моем блоге

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:20, 16-02-2018 | #5


Аватара для Swit0

Старожил


Сообщения: 150
Благодарности: 4

Профиль | Отправить PM | Цитировать


Добрый день! Спасибо, получилось. А если мне нужно указать несколько организаций через запятую, без поиска. Т.е например надо выделить ООО ЗСТ, потом ООО ДБГ, и таких несколько, то как поступить? Заранее спасибо.

Отправлено: 10:58, 20-02-2018 | #6


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата Swit0:
А если мне нужно указать несколько организаций через запятую, без поиска »
Swit0, я обычно выступаю за визуальный контроль того, что делает программа. Предлагаю такой вариант: перечень организаций вы вводите через запятую+пробел, запускаете код ниже. Код присваивает найденным диапазонам имена, которые вы можете выбрать либо в окне имя (которое находится левее окна формул, чуть выше ячейки А1 - рядом с адресом выделенной ячейки есть стрелочка, нажав на которую вы получите список именованных диапазонов), либо через горячую клавишу F5. Диапазон по этому действию выделяется, дальше вы его аналогично удаляете (либо оставляете). Если код не найдет какой-то запрос, после выполнения он выбросит окно.
Код: Выделить весь код
Public Sub naming_for_deleting()
    Dim rngStart As Range, rngEnd As Range, i As Integer
    Dim strStart As String, strEnd As String, strF As String, strErr As String, vrtTxt As Variant
    strF = InputBox("Введите через запятую (с пробелом) перечень", "Поиск", "ООО ЗСТ, ООО ВВВВ, ООО ООО, ООО МММ")
    vrtTxt = Split(strF, ", ")
    On Error Resume Next
    For i = LBound(vrtTxt) To UBound(vrtTxt)
        strStart = vrtTxt(i)
        strEnd = "Всего по: " & vrtTxt(i)
        Set rngStart = Cells.Find(What:=strStart, After:=ActiveSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        Set rngEnd = ActiveSheet.Cells.Find(What:=strEnd, After:=rngStart, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        If Err.Number <> 0 Then
            strErr = strErr & strStart & ","
            Err.Clear
        Else
            ActiveWorkbook.Names.Add Name:=Replace(strStart, " ", "_"), RefersTo:="=" & ActiveSheet.Name & "!" & Range(rngStart, rngEnd).EntireRow.Address
        End If
        
        Set rngStart = Nothing
        Set rngEnd = Nothing
    Next i
    
    If strErr <> "" Then MsgBox "Не найдены следующие запросы:" & strErr
    
    
End Sub
Удаляете вы все также сочетанием ctrl+знак минуса, но беда в том, что при удалении диапазона его имя все равно останется в рабочей книге со значением ошибки. Это не смертельно, но лучше эти имена удалять, например с помощью кода ниже (удалит все доступные имена с ошибкой, не затрагивая правильные имена).
Код: Выделить весь код
Public Sub del_names_err()
    Dim namObj As Name
    For Each namObj In ActiveWorkbook.Names
        If namObj.RefersTo Like "*[#]REF[!]*" Then namObj.Delete
    Next
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:43, 20-02-2018 | #7


Аватара для Swit0

Старожил


Сообщения: 150
Благодарности: 4

Профиль | Отправить PM | Цитировать


a_axe, благодарствую! А возможно ли сразу выделить диапазон организаций? Т.е имитация того, что если бы я их с CTRL мышкой выделял. Потом глазами пробегу по документу, если ок, то CTRL минус. Конечная цель - очистить документ от ненужных организаций.

Отправлено: 14:42, 20-02-2018 | #8


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата Swit0:
сразу выделить диапазон организаций? »
Попробуйте код ниже:
Код: Выделить весь код
Public Sub select_all_for_deleting()
    Dim rngStart As Range, rngEnd As Range, i As Integer, rngAll As Range
    Dim strStart As String, strEnd As String, strF As String, strErr As String, vrtTxt As Variant
    strF = InputBox("Введите через запятую (с пробелом) перечень", "Поиск", "ООО ЗСТ, ООО ВВВВ, ООО ООО, ООО МММ")
    vrtTxt = Split(strF, ", ")
    On Error Resume Next
    For i = LBound(vrtTxt) To UBound(vrtTxt)
        strStart = vrtTxt(i)
        strEnd = "Всего по: " & vrtTxt(i)
        Set rngStart = Cells.Find(What:=strStart, After:=ActiveSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        Set rngEnd = ActiveSheet.Cells.Find(What:=strEnd, After:=rngStart, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        If Err.Number <> 0 Then
            strErr = strErr & strStart & ","
            Err.Clear
        Else
            If rngAll Is Nothing Then Set rngAll = Range(rngStart, rngEnd).EntireRow Else Set rngAll = Union(rngAll, Range(rngStart, rngEnd).EntireRow)
        End If
        
        Set rngStart = Nothing
        Set rngEnd = Nothing
    Next i
    
    If strErr <> "" Then MsgBox "Не найдены следующие запросы:" & strErr
    rngAll.Select
    Set rngAll = Nothing
End Sub

-------
[Форум Word и Excel] - [Как запустить Word, Excel и Outlook в безопасном режиме?] - [Как удалить шаблон Word Normal.dotm?]

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:53, 20-02-2018 | #9


Аватара для Swit0

Старожил


Сообщения: 150
Благодарности: 4

Профиль | Отправить PM | Цитировать


a_axe, добрый день, спасибо. К сожалению, как оказалось в дальнейшем форма отчета меняется, там уже нет графы "Всего по:" и дифференцировать организацию не удастся. Она начинается с заголовка уже другой организации.

Отправлено: 08:55, 21-02-2018 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2016 - Отфильтровать ненужную информацию в Excel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Debian/Ubuntu - [решено] отфильтровать файлы а затем удалить. Trinux Общий по Linux 12 27-06-2013 18:13
2008 R2 - отфильтровать журнал логирования Trinux Windows Server 2008/2008 R2 3 27-05-2013 16:40
.NET - [решено] Как извлечь информацию с одного столбца Excel-документа Marsella_88 Программирование и базы данных 5 25-05-2012 15:46
[решено] Использовать информацию из Excel документа Не флужу AutoIt 2 24-03-2010 17:50




 
Переход