Удаление строк в Excel
Модератор: Naeel Maqsudov
Здорово живем!
Возникла такая задача. Есть отчет по заявкам на получение кредита в Excel. В этом отчете фиксируется когда клиент оставил заявку, скоко просит, и результат что решил банк, выдать деньги или отказать. Суть задачи в том, что надо удалить выборочно строки где в столбце "Результат" стоит слово допустим "Отказано", а нижние строки поднять на место удаленной. Т.е. удалять надо не саму строку а содержимое (значения). Сам я токо приступил к решению данной задачи. Может паралельно умные люди подскажут как это сделать лучше. Может кому-то приходилось такое делать.
Прикрепил отчет. Подробное объяснение там же.
Заранее спасибо!
Возникла такая задача. Есть отчет по заявкам на получение кредита в Excel. В этом отчете фиксируется когда клиент оставил заявку, скоко просит, и результат что решил банк, выдать деньги или отказать. Суть задачи в том, что надо удалить выборочно строки где в столбце "Результат" стоит слово допустим "Отказано", а нижние строки поднять на место удаленной. Т.е. удалять надо не саму строку а содержимое (значения). Сам я токо приступил к решению данной задачи. Может паралельно умные люди подскажут как это сделать лучше. Может кому-то приходилось такое делать.
Прикрепил отчет. Подробное объяснение там же.
Заранее спасибо!
- Вложения
-
- Отчет1.zip
- (23.03 КБ) 51 скачивание
В принципе ничего сложного 
понадобиться переменная "количество удаленных"
1)приравниваеш "количество удаленных" к 0
2)в цикле от 1 до 655536 (с break при нахождении пустой ячейки)пройтись по столбцу "результат"
если в ячейке оказывается значение к-е нужно удалить увеличиваем "количество удаленных" на 1
если в ячейке оказывается любое другое значение - скопировать нужную часть текущей строки вверх со смещением на "количество удаленных"
3)после цикла очистить снизу "количество удаленных" строчек
с учетом того как перемещается выделение при копировании, я бы реализовал последний пункт примерно так:
выделить на строчке ниже текущего выделения нужные части
расширить выделение до 65536 строчки
удалить содержимое выделения

понадобиться переменная "количество удаленных"
1)приравниваеш "количество удаленных" к 0
2)в цикле от 1 до 655536 (с break при нахождении пустой ячейки)пройтись по столбцу "результат"
если в ячейке оказывается значение к-е нужно удалить увеличиваем "количество удаленных" на 1
если в ячейке оказывается любое другое значение - скопировать нужную часть текущей строки вверх со смещением на "количество удаленных"
3)после цикла очистить снизу "количество удаленных" строчек
с учетом того как перемещается выделение при копировании, я бы реализовал последний пункт примерно так:
выделить на строчке ниже текущего выделения нужные части
расширить выделение до 65536 строчки
удалить содержимое выделения
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Mint86, может имеется ввиду "Удалить ячейки со сдвигом вверх"?
Selection.Delete Shift:=xlUp'здесь Selection - выделенная строка со словом Отказано.
Selection.Delete Shift:=xlUp'здесь Selection - выделенная строка со словом Отказано.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
К сожалению нет, так как строк всего 100 и есть формулы. Мне надо удалить только контент и вытащить вверх содержимое нижних строк..." писал(а):может имеется ввиду "Удалить ячейки со сдвигом вверх"?
Так же есть защищенные ячейки...
Вродеж все понятно обьяснил если не понятно вот пример
p.s. за такие таблицы разработчикам руки отрубать надо
Код: Выделить всё
Sub Макрос1()
Dim d As String
Dim col, row, deleted, temp As Integer
col = ActiveCell.Column ' запоминание по какому столбцу делать отбор
d = ActiveCell.FormulaR1C1
deleted = 0
For row = 6 To 65536 Step 1
If (Cells(row, col).FormulaR1C1 = "") Then
GoTo break
End If
If (Cells(row, col).FormulaR1C1 = d) Then
deleted = deleted + 1
Else
temp = row - deleted
Range(Cells(row, 3), Cells(row, 97)).Select
Selection.Copy
Range(Cells(temp, 3), Cells(temp, 97)).Select
ActiveSheet.Paste
Range(Cells(row, 109), Cells(row, 109)).Select
Selection.Copy
Range(Cells(temp, 109), Cells(temp, 109)).Select
ActiveSheet.Paste
End If
Next row
break:
row = ActiveCell.row + 1
Range(Cells(row, 3), Cells(65536, 97)).Select
Selection.Clear
Range(Cells(row, 109), Cells(65536, 109)).Select
Selection.Clear
End Sub
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Mint86,
Делать не буду Вы и сами знаете как. Только алгоритм.
Снимаем защиту, находим нужную строку, удаляем "Удалить ячейки со сдвигом вверх". В конце процедуры обновляем все формулы, ставим защиту.
Все работает замечательно.
К сожалению нет, так как строк всего 100 и есть формулы. Мне надо удалить только контент и вытащить вверх содержимое нижних строк...
эт все понятно. У меня подобные вопросы встречались.Так же есть защищенные ячейки...
Делать не буду Вы и сами знаете как. Только алгоритм.
Снимаем защиту, находим нужную строку, удаляем "Удалить ячейки со сдвигом вверх". В конце процедуры обновляем все формулы, ставим защиту.
Все работает замечательно.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
demon416, VictorM, спасибо за участие. Решил задачу используя ваши советы.