Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск и удаление строк в документе - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск и удаление строк в документе (Макросы/Sub)
Поиск и удаление строк в документе
dmitriy_008 Дата: Вторник, 25.07.2017, 09:03 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день! Нужна помощь в разборе документа. Есть книга в excel в которой более 200 листов, на каждом листе таблица. Нужно организовать поиск по столбцу ИННЮЛ значения которые начинаются с 52, если не начинается с 52 или пустая ячейка то удалять всю строку. Так пройти по всему документу.
К сообщению приложен файл: 7196384.xlsx (13.0 Kb)
 
Ответить
СообщениеДобрый день! Нужна помощь в разборе документа. Есть книга в excel в которой более 200 листов, на каждом листе таблица. Нужно организовать поиск по столбцу ИННЮЛ значения которые начинаются с 52, если не начинается с 52 или пустая ячейка то удалять всю строку. Так пройти по всему документу.

Автор - dmitriy_008
Дата добавления - 25.07.2017 в 09:03
KuklP Дата: Вторник, 25.07.2017, 10:26 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
[vba]
Код
Sub www()
    Dim sh As Worksheet, c As Range
    For Each sh In ThisWorkbook.Worksheets
        Set c = sh.Range("1:1").Find("ИННЮЛ", , , xlPart, , , False)
        If Not c Is Nothing Then
            With Intersect(sh.Columns(c.Column), sh.UsedRange)
                .SpecialCells(4).EntireRow.Delete
                .AutoFilter 1, "<520000000", xlOr, ">=530000000"
                .Offset(1).SpecialCells(12).EntireRow.Delete
                .Parent.AutoFilterMode = 0
            End With
        End If
    Next
End Sub
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение[vba]
Код
Sub www()
    Dim sh As Worksheet, c As Range
    For Each sh In ThisWorkbook.Worksheets
        Set c = sh.Range("1:1").Find("ИННЮЛ", , , xlPart, , , False)
        If Not c Is Nothing Then
            With Intersect(sh.Columns(c.Column), sh.UsedRange)
                .SpecialCells(4).EntireRow.Delete
                .AutoFilter 1, "<520000000", xlOr, ">=530000000"
                .Offset(1).SpecialCells(12).EntireRow.Delete
                .Parent.AutoFilterMode = 0
            End With
        End If
    Next
End Sub
[/vba]

Автор - KuklP
Дата добавления - 25.07.2017 в 10:26
Manyasha Дата: Вторник, 25.07.2017, 10:29 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
еще вариант:
[vba]
Код
Sub delRows()
    Dim sh, lr&, i&, x As Range
    For Each sh In ThisWorkbook.Sheets
        With sh
            Set x = .Rows(1).Find(What:="ИННЮЛ", LookAt:=xlWhole)
            If Not x Is Nothing Then
                lr = .Cells(Rows.Count, 1).End(xlUp).Row
                For i = lr To 2 Step -1
                    If Left(.Cells(i, x.Column), 2) <> "52" Then
                        .Cells(i, x.Column).EntireRow.Delete
                    End If
                Next i
            End If
        End With
    Next sh
End Sub
[/vba]
К сообщению приложен файл: 7196384-1.xlsm (20.7 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениееще вариант:
[vba]
Код
Sub delRows()
    Dim sh, lr&, i&, x As Range
    For Each sh In ThisWorkbook.Sheets
        With sh
            Set x = .Rows(1).Find(What:="ИННЮЛ", LookAt:=xlWhole)
            If Not x Is Nothing Then
                lr = .Cells(Rows.Count, 1).End(xlUp).Row
                For i = lr To 2 Step -1
                    If Left(.Cells(i, x.Column), 2) <> "52" Then
                        .Cells(i, x.Column).EntireRow.Delete
                    End If
                Next i
            End If
        End With
    Next sh
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 25.07.2017 в 10:29
китин Дата: Вторник, 25.07.2017, 10:55 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
и мой ущербненький вариантик
[vba]
Код
Sub uuu()
Dim i&, LastRow&
Dim sh As Worksheet
Dim stol As Long
Dim rFndRng As Range
     For Each sh In ThisWorkbook.Sheets
           With sh
            sh.Activate
      
         LastRow = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
         Set rFndRng = ActiveSheet.UsedRange.Find("ИННЮЛ", , xlFormulas, xlWhole)
         stol = rFndRng.Column
        For i = LastRow To 2 Step -1
                If Cells(i, stol) = "" Or Left(Cells(i, stol), 2) <> 52 Then
                  Rows(i).Delete
                End If
         Next i
         End With
    Next sh
End Sub
[/vba]
там на первом листе кнопочка
К сообщению приложен файл: dmitriy_008.xlsm (20.7 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Вторник, 25.07.2017, 10:56
 
Ответить
Сообщениеи мой ущербненький вариантик
[vba]
Код
Sub uuu()
Dim i&, LastRow&
Dim sh As Worksheet
Dim stol As Long
Dim rFndRng As Range
     For Each sh In ThisWorkbook.Sheets
           With sh
            sh.Activate
      
         LastRow = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
         Set rFndRng = ActiveSheet.UsedRange.Find("ИННЮЛ", , xlFormulas, xlWhole)
         stol = rFndRng.Column
        For i = LastRow To 2 Step -1
                If Cells(i, stol) = "" Or Left(Cells(i, stol), 2) <> 52 Then
                  Rows(i).Delete
                End If
         Next i
         End With
    Next sh
End Sub
[/vba]
там на первом листе кнопочка

Автор - китин
Дата добавления - 25.07.2017 в 10:55
Manyasha Дата: Вторник, 25.07.2017, 11:37 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Игорь, ну почему же ущербненький? Хороший вариант, очень похож на мой)) Если убрать активацию листа, будет вообще замечательный :D


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеИгорь, ну почему же ущербненький? Хороший вариант, очень похож на мой)) Если убрать активацию листа, будет вообще замечательный :D

Автор - Manyasha
Дата добавления - 25.07.2017 в 11:37
китин Дата: Вторник, 25.07.2017, 11:50 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
почему же ущербненький?

[offtop]ааа сам себя не похвалишь.... :D
Если убрать активацию листа,

странно у меня без [vba]
Код
sh.Activate
[/vba] не хотел работать


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
почему же ущербненький?

[offtop]ааа сам себя не похвалишь.... :D
Если убрать активацию листа,

странно у меня без [vba]
Код
sh.Activate
[/vba] не хотел работать

Автор - китин
Дата добавления - 25.07.2017 в 11:50
_Boroda_ Дата: Вторник, 25.07.2017, 11:55 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
у меня без
sh.Activate
не хотел работать

Правильно. Ты под Вичем точки не везде поставил
[vba]
Код
Sub uuu()
Dim i&, LastRow&
Dim sh As Worksheet
Dim stol As Long
Dim rFndRng As Range
     For Each sh In ThisWorkbook.Sheets
           With sh
            LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
            Set rFndRng = .UsedRange.Find("ИННЮЛ", , xlFormulas, xlWhole)
            stol = rFndRng.Column
            For i = LastRow To 2 Step -1
                If .Cells(i, stol) = "" Or Left(.Cells(i, stol), 2) <> 52 Then
                    .Rows(i).Delete
                End If
            Next i
         End With
    Next sh
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
у меня без
sh.Activate
не хотел работать

Правильно. Ты под Вичем точки не везде поставил
[vba]
Код
Sub uuu()
Dim i&, LastRow&
Dim sh As Worksheet
Dim stol As Long
Dim rFndRng As Range
     For Each sh In ThisWorkbook.Sheets
           With sh
            LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
            Set rFndRng = .UsedRange.Find("ИННЮЛ", , xlFormulas, xlWhole)
            stol = rFndRng.Column
            For i = LastRow To 2 Step -1
                If .Cells(i, stol) = "" Or Left(.Cells(i, stol), 2) <> 52 Then
                    .Rows(i).Delete
                End If
            Next i
         End With
    Next sh
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 25.07.2017 в 11:55
китин Дата: Вторник, 25.07.2017, 12:10 | Сообщение № 8
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
точки не везде поставил

то есть точка перед командой означает, что эта команда должна работать на активном листе?


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
точки не везде поставил

то есть точка перед командой означает, что эта команда должна работать на активном листе?

Автор - китин
Дата добавления - 25.07.2017 в 12:10
and_evg Дата: Вторник, 25.07.2017, 12:18 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
то есть точка перед командой означает

означает, что данная команда должна работать с объектом описанном в виче.
 
Ответить
Сообщение
то есть точка перед командой означает

означает, что данная команда должна работать с объектом описанном в виче.

Автор - and_evg
Дата добавления - 25.07.2017 в 12:18
китин Дата: Вторник, 25.07.2017, 12:22 | Сообщение № 10
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
данная команда должна работать с объектом описанном в виче

ясно, спасибо


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
данная команда должна работать с объектом описанном в виче

ясно, спасибо

Автор - китин
Дата добавления - 25.07.2017 в 12:22
dmitriy_008 Дата: Вторник, 25.07.2017, 12:43 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо всем!
 
Ответить
СообщениеСпасибо всем!

Автор - dmitriy_008
Дата добавления - 25.07.2017 в 12:43
_Boroda_ Дата: Вторник, 25.07.2017, 12:58 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИгорь, вот, почитай
https://msdn.microsoft.com/ru-ru/library/wc500chb(v=vs.110).aspx

Автор - _Boroda_
Дата добавления - 25.07.2017 в 12:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск и удаление строк в документе (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!