Удаление строк....Selection.Delete Shift:=xlUp.....

Программирование на Visual Basic for Applications
sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Удаление строк....Selection.Delete Shift:=xlUp.....

Сообщение sonata » 21.10.2003 (Вт) 17:01

Selection.Delete Shift:=xlUp
Могут ли здесь быть другие данные?
И еще проблема с циклом при удалении строчек,
Как она решается?
Мне надо удалить пустые строчки....
Код: Выделить всё
Public Sub Row_delete()
For i = 10 To 1000
If (Cells(i, 1).Value = "") Then
    Rows(i).Select
    Selection.Delete Shift:=xlUp
End If
Next
End Sub

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Удаление строк....Selection.Delete Shift:=xlUp.....

Сообщение alibek » 21.10.2003 (Вт) 22:50

sonata писал(а):И еще проблема с циклом при удалении строчек,
Код: Выделить всё
Public Sub Row_delete()
For i = 10 To 1000
If (Cells(i, 1).Value = "") Then
    Rows(i).Select
    Selection.Delete Shift:=xlUp
    [color=red]i = i - 1[/color]
End If
Next
End Sub

полагаю, так?
Lasciate ogni speranza, voi ch'entrate.

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 22.10.2003 (Ср) 9:06

Ок!Только он получается зацикленным....

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.10.2003 (Ср) 9:19

Во-первых, правда ли, что пустой считается та строка, у которой пустая первая ячейка? :)
Во-вторых...
Код: Выделить всё
function DeleteBlankRows(r as excel.range) as long
  dim i as excel.range
  for each i in r.rows
    if i.cells(1,1)=vbnullstring then i.delete xlup:DeleteBlankRows=DeleteBlankRows+1
  next
end function
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.10.2003 (Ср) 9:36

Vitaly1 писал(а):Alibek, разве компилятор позволит уменьшить переменную цикла i? в Обычнов VB это нельзя делать. Не думаю, что в VBA можно!

:shock: :shock: :shock:
Откуда ты взял что нельзя уменьшить самую обычную переменную :?: :?: :?:


Вот редиска, взял и удалил свой пост, пока я ответ писал.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 22.10.2003 (Ср) 9:41

Alibek писал(а):For i = 10 To 1000
If (Cells(i, 1).Value = "") Then
Rows(i).Select
Selection.Delete Shift:=xlUp
i = i - 1
End If
Next


Строка i = i - 1 лишняя, да и зацикливание может быть в некоторых ситуациях, так будет работать быстрее и не зациклица:

Код: Выделить всё
For i = 1000 To 10 step -1
If (Cells(i, 1).Value = "") Then
    Rows(i).Select
    Selection.Delete Shift:=xlUp 
End If
Next



А можно еще во это
Код: Выделить всё
Rows(i).Select
    Selection.Delete Shift:=xlUp 

На это заменить
Код: Выделить всё
Rows(i).Delete Shift:=xlUp 
Последний раз редактировалось Vitaly1 22.10.2003 (Ср) 10:02, всего редактировалось 1 раз.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 22.10.2003 (Ср) 9:52

Gserg писал(а):Откуда ты взял что нельзя уменьшить самую обычную переменную

Не обычную, а переменную цикла уменьшить самому внутри цикла. Компилятор Delphi, например, не позволяет этого делать. Помойму, VB тоже не позволяет, VBA позволяет, проверил.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.10.2003 (Ср) 9:55

Компилятор Delphi нам не указ :twisted:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 22.10.2003 (Ср) 9:59

Соната писал(а):Ок!Только он получается зацикленным....


совершенно верно, в примере Alibek такое может быть, зри мой пример выше.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 22.10.2003 (Ср) 10:07

Gserg писал(а):Компилятор Delphi нам не указ

Ну это понятно :D . Только лучше все-же не уменьшать самому переменную цикла For, а то зацикливание может произойти 8)

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 22.10.2003 (Ср) 14:35

я бы так сделал
Код: Выделить всё
Public Sub Row_delete()
Dim n As Long, i As Long
n = 50: i = 1
Do While i < n
    If (Cells(i, 1).Value = "") Then
        Rows(i).Delete Shift:=xlUp
        i = i - 1: n = n - 1
    End If
    i = i + 1
Loop
End Sub
Ничто так не ограничивает полёт мысли программиста, как компилятор

Romanaerl
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 09.10.2003 (Чт) 13:21

Сообщение Romanaerl » 27.10.2003 (Пн) 17:07

А не проще цикл от обратного сделать?

Я у себя удаляю снизу вверх -

For i=100 to 1
IF Cells(i,1).Value=" "
Rows(i).Delete
END IF
next i
я не программер - я только учусь :)

Romanaerl
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 09.10.2003 (Чт) 13:21

Сообщение Romanaerl » 27.10.2003 (Пн) 17:13

А еще можно так:
Код: Выделить всё
    g = 1
    z = 1000
    For i = 1 To z
        If Cells(g, 1).Value = "" Then
            Rows(g).Delete
        Else
            g = g + 1
        End If
    Next i
я не программер - я только учусь :)

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 27.10.2003 (Пн) 18:41

2Romanaerl а ты запускать пробовал когда пустые 3-4 строки :)
зы в первом посте нод еще КАК МИНИМУМ дописать step -1 :)
Ничто так не ограничивает полёт мысли программиста, как компилятор

Romanaerl
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 09.10.2003 (Чт) 13:21

Сообщение Romanaerl » 28.10.2003 (Вт) 12:21

С первым постом - лажанулся - каюсь... :)

Но вот второй использую в своем прайсе... :)
я не программер - я только учусь :)

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 30.10.2003 (Чт) 13:32

Vitaly1 писал(а):
Gserg писал(а):Откуда ты взял что нельзя уменьшить самую обычную переменную

Компилятор Delphi, например, не позволяет этого делать...

Да ну...? Прям совсем не позволяет? :roll:
Origin - это что?


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

    TopList