Удаление строк в Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

Здорово живем!
Возникла такая задача. Есть отчет по заявкам на получение кредита в Excel. В этом отчете фиксируется когда клиент оставил заявку, скоко просит, и результат что решил банк, выдать деньги или отказать. Суть задачи в том, что надо удалить выборочно строки где в столбце "Результат" стоит слово допустим "Отказано", а нижние строки поднять на место удаленной. Т.е. удалять надо не саму строку а содержимое (значения). Сам я токо приступил к решению данной задачи. Может паралельно умные люди подскажут как это сделать лучше. Может кому-то приходилось такое делать.
Прикрепил отчет. Подробное объяснение там же.
Заранее спасибо!
Вложения
Отчет1.zip
(23.03 КБ) 52 скачивания
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

В принципе ничего сложного :)
понадобиться переменная "количество удаленных"

1)приравниваеш "количество удаленных" к 0
2)в цикле от 1 до 655536 (с break при нахождении пустой ячейки)пройтись по столбцу "результат"
если в ячейке оказывается значение к-е нужно удалить увеличиваем "количество удаленных" на 1
если в ячейке оказывается любое другое значение - скопировать нужную часть текущей строки вверх со смещением на "количество удаленных"
3)после цикла очистить снизу "количество удаленных" строчек
с учетом того как перемещается выделение при копировании, я бы реализовал последний пункт примерно так:
выделить на строчке ниже текущего выделения нужные части
расширить выделение до 65536 строчки
удалить содержимое выделения
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Mint86, может имеется ввиду "Удалить ячейки со сдвигом вверх"?
Selection.Delete Shift:=xlUp'здесь Selection - выделенная строка со словом Отказано.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

&quot писал(а):может имеется ввиду "Удалить ячейки со сдвигом вверх"?
К сожалению нет, так как строк всего 100 и есть формулы. Мне надо удалить только контент и вытащить вверх содержимое нижних строк...
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

Так же есть защищенные ячейки...
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

Вродеж все понятно обьяснил если не понятно вот пример

Код: Выделить всё

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
p.s. за такие таблицы разработчикам руки отрубать надо
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Mint86,
К сожалению нет, так как строк всего 100 и есть формулы. Мне надо удалить только контент и вытащить вверх содержимое нижних строк...
Так же есть защищенные ячейки...
эт все понятно. У меня подобные вопросы встречались.
Делать не буду Вы и сами знаете как. Только алгоритм.
Снимаем защиту, находим нужную строку, удаляем "Удалить ячейки со сдвигом вверх". В конце процедуры обновляем все формулы, ставим защиту.
Все работает замечательно.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

demon416, VictorM, спасибо за участие. Решил задачу используя ваши советы.
Ответить