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

Вход

Регистрация

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

 

= Мир MS Excel/Удалить строки после ячейки содержащей слово - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Удалить строки после ячейки содержащей слово
timo64uk Дата: Вторник, 12.11.2024, 09:21 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
Добрый день :)
Подобную тему недавно поднимал, однако появились нюансы, которые самостоятельно методом проб не решил.
В столбце C есть слово "от Заказчика / Owner", которое находится в нескольких ячейках.
Нужно от самой нижней ячейки, содержащей текст "от Заказчика / Owner" удалить все строки что ниже (т.е. удалить 999 строк либо до последней заполненной по столбцу C, либо массив от A до AA).
Прошу вашей помощи, т.к. эти кода: [vba]
Код
Dim urar As Range, row1ar As Long, row2ar As Long
Set urar = ActiveSheet.UsedRange
row1ar = Columns("C").Find("от Заказчика / Owner").Row
row2ar = urar.Row + urar.Rows.Count + 1
Columns("A:BK").Resize(row2ar - row1ar).Offset(row1ar).Delete
[/vba] [vba]
Код
RRow = Application.Match("от Заказчика / Owner", Range("C1:C9999"), 0) + 3
    Rows(RRow & ":" & RRow + 999).Delete Shift:=xlUp
[/vba] удаляют от первого слова "от Заказчика / Owner"
К сообщению приложен файл: 0202022.xlsx (227.1 Kb)


Сообщение отредактировал timo64uk - Вторник, 12.11.2024, 09:27
 
Ответить
СообщениеДобрый день :)
Подобную тему недавно поднимал, однако появились нюансы, которые самостоятельно методом проб не решил.
В столбце C есть слово "от Заказчика / Owner", которое находится в нескольких ячейках.
Нужно от самой нижней ячейки, содержащей текст "от Заказчика / Owner" удалить все строки что ниже (т.е. удалить 999 строк либо до последней заполненной по столбцу C, либо массив от A до AA).
Прошу вашей помощи, т.к. эти кода: [vba]
Код
Dim urar As Range, row1ar As Long, row2ar As Long
Set urar = ActiveSheet.UsedRange
row1ar = Columns("C").Find("от Заказчика / Owner").Row
row2ar = urar.Row + urar.Rows.Count + 1
Columns("A:BK").Resize(row2ar - row1ar).Offset(row1ar).Delete
[/vba] [vba]
Код
RRow = Application.Match("от Заказчика / Owner", Range("C1:C9999"), 0) + 3
    Rows(RRow & ":" & RRow + 999).Delete Shift:=xlUp
[/vba] удаляют от первого слова "от Заказчика / Owner"

Автор - timo64uk
Дата добавления - 12.11.2024 в 09:21
and_evg Дата: Вторник, 12.11.2024, 09:30 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
Добрый день.
Насколько я понял. Необходимо найти последнее вхождение...
Тогда Вам в помощь небольшая функция:

[vba]
Код
Function FindDownCell(FindRange As Range, StrFind As String) As Range
'Поиск последнего значения и возврат ячейки как объект
    Dim firstAddress
    Dim c As Range: Set c = FindRange.Find(What:=StrFind, LookIn:=xlFormulas, LookAt:=xlPart)  ' собственно поиск
    ' если ничего не нашли - выход
    If c Is Nothing Then Exit Function 'MsgBox "Искомые данные не найдены", vbExclamation:
    firstAddress = c.Address
    Do
        Set FindDownCell = c
        Set c = FindRange.FindNext(c)
    Loop While c.Address <> firstAddress
End Function
[/vba]
 
Ответить
СообщениеДобрый день.
Насколько я понял. Необходимо найти последнее вхождение...
Тогда Вам в помощь небольшая функция:

[vba]
Код
Function FindDownCell(FindRange As Range, StrFind As String) As Range
'Поиск последнего значения и возврат ячейки как объект
    Dim firstAddress
    Dim c As Range: Set c = FindRange.Find(What:=StrFind, LookIn:=xlFormulas, LookAt:=xlPart)  ' собственно поиск
    ' если ничего не нашли - выход
    If c Is Nothing Then Exit Function 'MsgBox "Искомые данные не найдены", vbExclamation:
    firstAddress = c.Address
    Do
        Set FindDownCell = c
        Set c = FindRange.FindNext(c)
    Loop While c.Address <> firstAddress
End Function
[/vba]

Автор - and_evg
Дата добавления - 12.11.2024 в 09:30
timo64uk Дата: Вторник, 12.11.2024, 09:51 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
функция

Спасибо большое.
Подскажите, пожалуйста, чтобы её вызвать из основного кода, то нужно в коде просто прописать (в нужном месте и в модуль саму функцию сохранив) [vba]
Код
Call FindDownCell
[/vba]


Сообщение отредактировал timo64uk - Вторник, 12.11.2024, 09:53
 
Ответить
Сообщение
функция

Спасибо большое.
Подскажите, пожалуйста, чтобы её вызвать из основного кода, то нужно в коде просто прописать (в нужном месте и в модуль саму функцию сохранив) [vba]
Код
Call FindDownCell
[/vba]

Автор - timo64uk
Дата добавления - 12.11.2024 в 09:51
and_evg Дата: Вторник, 12.11.2024, 09:56 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
Что бы получить номер ПОСЛЕДНЕЙ строки содержащей "от Заказчика / Owner" например так:
[vba]
Код
NomerStroki = FindDownCell(urar, "от Заказчика / Owner").Row
[/vba]
 
Ответить
СообщениеЧто бы получить номер ПОСЛЕДНЕЙ строки содержащей "от Заказчика / Owner" например так:
[vba]
Код
NomerStroki = FindDownCell(urar, "от Заказчика / Owner").Row
[/vba]

Автор - and_evg
Дата добавления - 12.11.2024 в 09:56
timo64uk Дата: Вторник, 12.11.2024, 10:06 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
так

ОООо, спасибо огромное.
 
Ответить
Сообщение
так

ОООо, спасибо огромное.

Автор - timo64uk
Дата добавления - 12.11.2024 в 10:06
_Boroda_ Дата: Вторник, 12.11.2024, 11:59 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16719
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Не люблю Финды, бывает, что зависает на них. Вот такой вариант

[vba]
Код
Sub tt()
    r1_ = Cells(1).SpecialCells(xlLastCell).Row
    ar_ = Cells(1, 3).Resize(r1_).Value
    t_ = "от Заказчика / Owner"
    For i = r1_ To 1 Step -1
        If ar_(i, 1) = t_ Then
            fl_ = 1
            Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Delete
            Exit For
        End If
    Next i
    If fl_ <> 1 Then
        MsgBox "Текст ''" & t_ & "'' не найден."
    End If
End Sub
[/vba]


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

[vba]
Код
Sub tt()
    r1_ = Cells(1).SpecialCells(xlLastCell).Row
    ar_ = Cells(1, 3).Resize(r1_).Value
    t_ = "от Заказчика / Owner"
    For i = r1_ To 1 Step -1
        If ar_(i, 1) = t_ Then
            fl_ = 1
            Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Delete
            Exit For
        End If
    Next i
    If fl_ <> 1 Then
        MsgBox "Текст ''" & t_ & "'' не найден."
    End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.11.2024 в 11:59
timo64uk Дата: Среда, 13.11.2024, 02:50 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
вариант

Спасибо вам огромное за код.
 
Ответить
Сообщение
вариант

Спасибо вам огромное за код.

Автор - timo64uk
Дата добавления - 13.11.2024 в 02:50
timo64uk Дата: Четверг, 14.11.2024, 08:37 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
например так
Прошу помощи.
[vba]
Код
Dim urar As Range, row1ar As Long, row2ar As Long, NomerStroki As Variant
Set urar = ActiveSheet.UsedRange
NomerStroki = FindDownCell(urar, "от Заказчика / Owner").Row + 1 '+1,т.к. оставляем строку с "от Заказчика"
lRow = Cells.SpecialCells(xlLastCell).Row
[/vba]
Получил два номера строк: NomerStroki - верхняя и lRow - нижняя. Как инициировать удаление между ними?
Здесь не идёт:
[vba]
Код
Rows("NomerStroki:lRow").Delete Shift:=xlUp
[/vba]


Сообщение отредактировал timo64uk - Четверг, 14.11.2024, 08:54
 
Ответить
Сообщение
например так
Прошу помощи.
[vba]
Код
Dim urar As Range, row1ar As Long, row2ar As Long, NomerStroki As Variant
Set urar = ActiveSheet.UsedRange
NomerStroki = FindDownCell(urar, "от Заказчика / Owner").Row + 1 '+1,т.к. оставляем строку с "от Заказчика"
lRow = Cells.SpecialCells(xlLastCell).Row
[/vba]
Получил два номера строк: NomerStroki - верхняя и lRow - нижняя. Как инициировать удаление между ними?
Здесь не идёт:
[vba]
Код
Rows("NomerStroki:lRow").Delete Shift:=xlUp
[/vba]

Автор - timo64uk
Дата добавления - 14.11.2024 в 08:37
Nic70y Дата: Четверг, 14.11.2024, 09:03 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 9008
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
так, наверное[vba]
Код
Rows(NomerStroki & ":" & lRow).Delete Shift:=xlUp
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщениетак, наверное[vba]
Код
Rows(NomerStroki & ":" & lRow).Delete Shift:=xlUp
[/vba]

Автор - Nic70y
Дата добавления - 14.11.2024 в 09:03
timo64uk Дата: Четверг, 14.11.2024, 09:19 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16

Спасибо. Работает.
Первый раз удаляет как нужно, но при повторном проигрывании, т.е. когда первый и последний номер строки совпадают, то удаляет и строки содержащие "от Заказчика" (обоих "от Заказчиков" удаляет).
[vba]
Код
lRow = Cells.SpecialCells(xlLastCell).Row+1
[/vba] добавил +1 и ура!!!
Крутяк. Спасибо всем огромное!
 
Ответить
Сообщение
Спасибо. Работает.
Первый раз удаляет как нужно, но при повторном проигрывании, т.е. когда первый и последний номер строки совпадают, то удаляет и строки содержащие "от Заказчика" (обоих "от Заказчиков" удаляет).
[vba]
Код
lRow = Cells.SpecialCells(xlLastCell).Row+1
[/vba] добавил +1 и ура!!!
Крутяк. Спасибо всем огромное!

Автор - timo64uk
Дата добавления - 14.11.2024 в 09:19
_Boroda_ Дата: Четверг, 14.11.2024, 09:25 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16719
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
NomerStroki - верхняя и lRow - нижняя. Как инициировать удаление между ними?

На пару постов выше:
Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Delete


добавил +1 и ура!!!

И снова туда же смотрим


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

На пару постов выше:
Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Delete


добавил +1 и ура!!!

И снова туда же смотрим

Автор - _Boroda_
Дата добавления - 14.11.2024 в 09:25
timo64uk Дата: Четверг, 14.11.2024, 13:02 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 100
Репутация: 1 ±
Замечаний: 0% ±

Office16
пару постов выше


[vba]
Код
r1_ = Cells(1).SpecialCells(xlLastCell).Row   '  номер нижней строки
    ar_ = Cells(1, 3).Resize(r1_).Value   'изменить размеры диапазона "1, 3" от ячейки "1, 3" до r1_ строк и r1_ столбцов
    t_ = "от Заказчика / Owner"
    For i = r1_ To 1 Step -1  'номер строки, который перебираем от нижней заполненной вверх
        If ar_(i, 1) = t_ Then
            fl_ = 1     ' событие если нашлось искомое
               Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Select
            Exit For
        End If
    Next i    'перебираем строки от нижней заполненной вверх
    If fl_ <> 1 Then
        MsgBox "Текст ''" & t_ & "'' не найден."
    End If
[/vba]
Попытался разобраться в коде, подскажите, пожалуйста, верно ли понял ход выполнения вычислений?
 
Ответить
Сообщение
пару постов выше


[vba]
Код
r1_ = Cells(1).SpecialCells(xlLastCell).Row   '  номер нижней строки
    ar_ = Cells(1, 3).Resize(r1_).Value   'изменить размеры диапазона "1, 3" от ячейки "1, 3" до r1_ строк и r1_ столбцов
    t_ = "от Заказчика / Owner"
    For i = r1_ To 1 Step -1  'номер строки, который перебираем от нижней заполненной вверх
        If ar_(i, 1) = t_ Then
            fl_ = 1     ' событие если нашлось искомое
               Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Select
            Exit For
        End If
    Next i    'перебираем строки от нижней заполненной вверх
    If fl_ <> 1 Then
        MsgBox "Текст ''" & t_ & "'' не найден."
    End If
[/vba]
Попытался разобраться в коде, подскажите, пожалуйста, верно ли понял ход выполнения вычислений?

Автор - timo64uk
Дата добавления - 14.11.2024 в 13:02
_Boroda_ Дата: Четверг, 14.11.2024, 14:43 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16719
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
1. "номер нижней строки" - не всегда, но как минимум. Почитайте справку. SpecialCells(xlLastCell) - последняя ячейка в используемом диапазоне. Эквивалентно нажатию Контрл+Енд. Чаще всего да, это последняя заполненная ячейка в таблице, но может быть и ниже. Но последнюю ячейку таблица точно захватит

2. "'изменить размеры диапазона "1, 3" от ячейки "1, 3" до r1_ строк и r1_ столбцов" - Нет.
ar_ = Cells(1, 3).Resize(r1_).Value - создаем массив ar_, начиная от ячейки С1 и вниз на r1_ строк

3. "номер строки, который перебираем от нижней заполненной вверх" - почти так. Не номер строки, а вообще номера циклом от r1_ до 1

[vba]
Код
Sub tt()
    r1_ = Cells(1).SpecialCells(xlLastCell).Row 'номер последней используемой строки
    ar_ = Cells(1, 3).Resize(r1_).Value 'в массив все от С1 вниз на r1_
    t_ = "от Заказчика / Owner" 'текст для поиска
    For i = r1_ To 1 Step -1 'цикл от r1_ до 1
        If ar_(i, 1) = t_ Then 'если элемент массива с номером i равен тексту для поиска
            fl_ = 1 'флаг равен 1
            Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Delete 'от ячейки столбца 1 строки i+1 вниз на r1_ - i + 1. Стираем эти строки
            Exit For 'Заканчиваем цикл
        End If ' окончание if
    Next i 'окончание цикла
    If fl_ <> 1 Then 'если флаг не =1 (мы не нашли искомый текст)
        MsgBox "Текст ''" & t_ & "'' не найден." 'выводим об этом сообщение
    End If '
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение1. "номер нижней строки" - не всегда, но как минимум. Почитайте справку. SpecialCells(xlLastCell) - последняя ячейка в используемом диапазоне. Эквивалентно нажатию Контрл+Енд. Чаще всего да, это последняя заполненная ячейка в таблице, но может быть и ниже. Но последнюю ячейку таблица точно захватит

2. "'изменить размеры диапазона "1, 3" от ячейки "1, 3" до r1_ строк и r1_ столбцов" - Нет.
ar_ = Cells(1, 3).Resize(r1_).Value - создаем массив ar_, начиная от ячейки С1 и вниз на r1_ строк

3. "номер строки, который перебираем от нижней заполненной вверх" - почти так. Не номер строки, а вообще номера циклом от r1_ до 1

[vba]
Код
Sub tt()
    r1_ = Cells(1).SpecialCells(xlLastCell).Row 'номер последней используемой строки
    ar_ = Cells(1, 3).Resize(r1_).Value 'в массив все от С1 вниз на r1_
    t_ = "от Заказчика / Owner" 'текст для поиска
    For i = r1_ To 1 Step -1 'цикл от r1_ до 1
        If ar_(i, 1) = t_ Then 'если элемент массива с номером i равен тексту для поиска
            fl_ = 1 'флаг равен 1
            Cells(i + 1, 1).Resize(r1_ - i + 1).EntireRow.Delete 'от ячейки столбца 1 строки i+1 вниз на r1_ - i + 1. Стираем эти строки
            Exit For 'Заканчиваем цикл
        End If ' окончание if
    Next i 'окончание цикла
    If fl_ <> 1 Then 'если флаг не =1 (мы не нашли искомый текст)
        MsgBox "Текст ''" & t_ & "'' не найден." 'выводим об этом сообщение
    End If '
End Sub

[/vba]

Автор - _Boroda_
Дата добавления - 14.11.2024 в 14:43
  • Страница 1 из 1
  • 1
Поиск:

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