Страницы: 1 2 След.
RSS
Удаление строк таблицы по условию
 
Здравствуйте
Есть макрос, который удаляет строки, если в столбце 'B' имеются числа от 0 до 100

Код
Sub Макрос22()
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 1 Step -1
         With .Cells(i)
             If 0 <= CLng(Trim$(.Value)) And CLng(Trim$(.Value)) <= 100 Then .EntireRow.Delete
         End With
     Next i
End With
End Sub
 

Помогите, пожалуйста, изменить код макроса, что бы строки удалялись, начиная со строки  'B2' и до последней активной ячейки этого столбца (строки в таблице добавляются/удаляются).
Если в ячейке вместо числа имеется знак № – то строку не удалять
..и как все сделать наоборот: не удалять строки, если в ячейках числа от 0 до 100, а остальные удалить. Если в ячейке вместо числа имеется знак № – то строку не удалять
 
просто изменить  For i = .Rows.Count To 1 Step -1 на To2

но ваш код будет выдавать ошибку в случае конвертации пустой ячейки в Cnlg,
на всякий случай подправил для вашего примера
Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
On Error Resume Next
With sh.UsedRange.Columns(2)
   For i = .Rows.Count To 2 Step -1
        If CLng(IIf(Cells(i, 2).Value = "", 0, Trim(Cells(i, 2).Value))) >= 0 And _
           CLng(IIf(Cells(i, 2).Value = "", 0, Trim(Cells(i, 2).Value))) <= 100 Then
            If Err.Number <> 13 Then
                Rows(i).Delete
            Else
                Err.Clear
            End If
        End If
     Next i
End Withлибо еще проще
либо еще проще
Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 2 Step -1
        If Cells(i, 2).Value <> "№" And Val(Cells(i, 2).Value) >= 0 And Val(Cells(i, 2).Value) <= 100 Then Rows(i).Delete
     Next i
End With
 
Изменено: Scripter - 16.04.2014 02:29:27
 
Scripter,
спасибо, а как сделать наоборот - не удалять строки, если в ячейках числа от 0 до 100, а остальные, от 100 и выше - удалить. И в обоих случаях не удалять строки, если в ячейке вместо числа имеется знак №
Изменено: sashgera - 16.04.2014 02:30:56
 
Цитата
sashgera пишет: не удалять строки, если в ячейках числа от 0 до 100,
Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("Лист1")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 2 Step -1
     If Val(Cells(i, 2).Value) > 100 Then Rows(i).Delete
     Next i
End With 
Изменено: Scripter - 16.04.2014 08:56:06
 
Scripter, большое спасибо, все отлично работает!
 
Scripter,

только что заметил, не удаляются пустые ячейки,
а в  ячейках, где стоит знак № - все нормально, они не удаляются
если можно поправьте

Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("склад")
With sh.UsedRange.Columns(2)
     For i = .Rows.Count To 5 Step -1
     If Val(Cells(i, 2).Value) > 100 Then Rows(i).Delete
     Next i
End With
 


 [USER=11992][/USER]
 
Цитата
sashgera пишет: не удаляются пустые ячейки
добавил проверку на пустые ячейки
Код
Dim sh As Worksheet, i As Long
Set sh = Sheets("склад")
With sh.UsedRange.Columns(2)
   For i = .Rows.Count To 5 Step -1
        If Val(Cells(i, 2).Value) > 100 Or Cells(i, 2).Value = "" Then Rows(i).Delete 
   Next i 
End With
проверка на пустые может быть выполнена разными вариантами:

Cells(i, 2).Value = ""
Cells(i, 2).Value = empty
IsEmpty(Cells(i, 2).Value)
 
Scripter, спасибо!  
 
Scripter, я немного изменил макрос, все работает

УДАЛЯЕМ строку если в ячейке столбца "B" есть число: от 0 до 399
НЕ УДАЛЯЕМ строку если в ячейке столбца "B" есть буква: k
НЕ УДАЛЯЕМ строку если в ячейке столбца "B" есть слово: стал
НЕ УДАЛЯЕМ строку если ячейка столбца "B"- пустая
также макрос удаляет строки если в ячейке столбца "B" есть какой либо текст, кроме 'k' и 'стал'


Код
Sub Макрос22()  
Dim sh As Worksheet, i As Long  
Set sh = Sheets("склад")  
With sh.UsedRange.Columns(2)  
For i = .Rows.Count To 4 Step -1  
If Cells(i, 2).Value <> "k" And Cells(i, 2).Value <> "стал" And Cells(i, 2).Value <> "" And Val(Cells(i, 2).Value) <= 399 Then Rows(i).Delete  
     Next i  
End With  
End Sub 
 
не получается сделать аналогичный макрос
1. НЕ УДАЛЯЛАСЬ строка если в ячейке столбца "B" есть буква: b
2. НЕ УДАЛЯЛАСЬ строка если в ячейке столбца "B" есть слово: стал
3. НЕ УДАЛЯЛАСЬ строка если ячейка столбца "B"- пустая
4. УДАЛЯЛАСЬ строка если в ячейке столбца "B" есть число: от 400 и выше
5. УДАЛЯЛАСЬ строка если в ячейке столбца "B" есть какой либо текст, кроме 'b' и 'стал'
пробовал так, все выполняется, кроме одного - макрос не удаляет строки если в ячейке столбца "B" есть текст


Код
If Cells(i, 2).Value <> "b" And Cells(i, 2).Value <> "стал" And Cells(i, 2).Value <> "" And Val(Cells(i, 2).Value) > 399 Then Rows(i).Delete
 

если можно, пожалуйста, помогите
Изменено: sashgera - 17.04.2014 01:39:50
 
так
Код
Sub Макрос5()
Dim sh As Worksheet, i As Long
Set sh = Sheets("склад")
With sh.UsedRange.Columns(2)
For i = .Rows.Count To 2 Step -1
If ((Not IsNumeric(Cells(i, 2).Value) And Cells(i, 2).Value <> "b" And Cells(i, 2).Value <> "стал") _
    Or Val(Cells(i, 2).Value) >= 400) And Cells(i, 2).Value <> "" Then Rows(i).Delete
     Next i
End With
End Sub
 
Scripter, спасибо!
 
Здравствуйте, уважаемые форумчане! Надеюсь, что эту тему кто-то посещает
Подскажите пожалуйста как написать макрос удаления строки с выделенной ячейкой.
Если ни в какой строке ячейка не выделена, то удалять ничего не нужно.
Заранее спасибо
 
Евген Магадан, В стартовом сообщении есть макрос (и ниже несколько штук) удаления строк по условию. Откорректируйте приглянувшийся под свои нужды
Согласие есть продукт при полном непротивлении сторон
 
Я вижу, просто не понимаю как записать удаление строки не по наличию значения в ячейке, а просто если ячейка выделена
 
Что в Вашем понимании 'выделена'? Она Активна? Окрашена в какой-то цвет? Еще как-то 'выделена'?
Файл-пример приложите. Как есть - Как надо
Согласие есть продукт при полном непротивлении сторон
 
Просто когда курсором щелкаешь по ячейке
 
Sub Макрос5()
Dim sh As Worksheet, i As Long
Set sh = Sheets("склад")
With sh.UsedRange.Columns(2)
For i = 2 to .Rows.Count
If cell(i).active Then Rows(i).Delete
    Next i
End With
End Sub
 
Цитата
Евген Магадан написал:
Просто когда курсором щелкаешь по ячейке
Так может проще удалять ту строку, по которой щелкнули мышью, сразу, по щелчку мыши?
Вы бы файл-пример все таки приложили.
Согласие есть продукт при полном непротивлении сторон
 
Файла примера нет, так как пишу с нуля, а в программировании я ноль.
По Вашему совету взял из предложенных вариантов и попробовал переработать, но что-то идёт не так.
По щелчку мыши думаю будет неудобно удалять, так как это будет список.
Изменено: Евген Магадан - 16.07.2024 16:04:47
 
Цитата
Евген Магадан написал:
Файла примера нет ... так как это будет список.
Вот файл-пример с этим списком(таблицей?) и приложите. Ваши навыки в программировании абсолютно для этого не важны.
И не стесняйтесь - распишите подробнее что вы хотите, последовательность действий.
По какому событию/нажатию кнопки/движению мыши и т.п. запускать макрос удаления?
Согласие есть продукт при полном непротивлении сторон
 
Смысл в чём.

Если в таблице выбрана ячейкаN, то мы удаляем строкуN
Если в таблице не выбрана ячейкаN, то мы не удаляем строкуN

Наверное, я изначально неправильно выразился.
Ячейка должна быть выбрана, а не выделена
 
Ну как хотите...Кому макрос нужен - тот файл-пример с таблицей и ЯчейкойN и рисует, я больше Вас пытать не буду
Согласие есть продукт при полном непротивлении сторон
 
Нет возможности файл отправить
 
Это любая таблица, с любыми значениями
 
Просто нужно удалять строку, когда в ней выбирают любую ячейку
 
Ну любая так любая
Код
Sub Евген_Магадан()
Dim iTbl As Range
On Error Resume Next
Application.ScreenUpdating = False
With ActiveSheet
  Set iTbl = .Range(.Cells(2, 3), .Cells(.Cells(.Rows.Count, "C").End(xlUp).Row, 4))
End With
If Not Intersect(ActiveCell, iTbl) Is Nothing Then
  ActiveCell.EntireRow.Delete
End If
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Спасибо.
Единственное, только я не понял как это работает)
Здесь макрос работает если выбрать 3 или 4 столбец на любом листе.
А возможно ли сделать так, чтобы макрос работал, когда ячейка выбирается в любом столбце?
 
Цитата
Sanja написал:
не стесняйтесь - распишите подробнее что вы хотите
Давайте сразу ВСЕ условия обозначьте, что-бы 100 раз не переписывать
Согласие есть продукт при полном непротивлении сторон
 
В принципе разобрался.
Нужно просто не указывать номера столбцов в шестой строке кода
 
Думаю, что этого достаточно)
Я просто стараюсь сам разобраться, на форум уже в крайних случаях обращаюсь
Спасибо, Sanja!!!!
Крепкого здоровья и рабочих кодов)))
Страницы: 1 2 След.
Читают тему
Наверх