Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2011, 01:45   #1
Magnetic Air
Пользователь
 
Регистрация: 28.01.2011
Сообщений: 29
По умолчанию уменьшение длины кода

Дело в том, что этот кусок кода:
Цитата:
...
Str = ActiveCell.Row
Stol = ActiveCell.Column
If Cells(Str, Stol).Value <> 0 Then
Cells(Str + 1, Stol).Range("a1").Select
Else
Range(Cells(Str, Stol), Cells(Str, Stol + 4)).Delete Shift:=xlUp
End If
...
повторяется 13 раз, может как-то можно загнать его в цикл, тем самым уменьшив его длину, а то код растягивается на "метры"
Magnetic Air вне форума Ответить с цитированием
Старый 02.12.2011, 02:55   #2
AKSENOV048
Пользователь
 
Аватар для AKSENOV048
 
Регистрация: 03.08.2011
Сообщений: 74
По умолчанию

может так
можно один раз написать
sub io()
Str = ActiveCell.Row
Stol = ActiveCell.Column
If Cells(Str, Stol).Value <> 0 Then
Cells(Str + 1, Stol).Range("a1").Select
Else
Range(Cells(Str, Stol), Cells(Str, Stol + 4)).Delete Shift:=xlUp
End If
end sub

и дальше
......
call io
......

получиться короче.
AKSENOV048 вне форума Ответить с цитированием
Старый 02.12.2011, 03:57   #3
Magnetic Air
Пользователь
 
Регистрация: 28.01.2011
Сообщений: 29
По умолчанию

тоже вариант, но sub'оф сильно много тоже не хочется
Magnetic Air вне форума Ответить с цитированием
Старый 02.12.2011, 06:22   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Всё это можно попробовать сделать без циклов, одной строкой кода.
А если одной строкой не получится - то 4-5 строк хватит.

Но, без примера файла, сложно понять, как оптимизировать код.
Прикрепите файл - поможем с кодом.
EducatedFool вне форума Ответить с цитированием
Старый 02.12.2011, 10:28   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Код:
If ActiveCell <> 0 Then ActiveCell(2).Select Else ActiveCell.Resize(,4).Delete Shift:=xlUp
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 02.12.2011, 10:49   #6
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

полностью согласен с пред оратором..

можно только чуть ускорить и чуть подправить(по количеству столбцов для удаления):
Код:
with activecell
If .value <> 0 Then offset(1).Select Else .Resize(,5).Delete Shift:=xlUp
end with
slan вне форума Ответить с цитированием
Старый 02.12.2011, 11:09   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а как же 13 раз подряд? и если уже ускорять (а это крайне важно на 13-разовом цикле), то надо уйти от Select
Код:
r = activecell.row: c = activecell.column
for i = 1 to 13
  If cells(r,c) <> 0 Then r = r+1 Else cells(r,1).Resize(,5).Delete Shift:=xlUp
next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 02.12.2011 в 11:20.
IgorGO вне форума Ответить с цитированием
Старый 02.12.2011, 11:19   #8
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

так селект на выходе - значит это кому-то надо. я б не стал так радикально
slan вне форума Ответить с цитированием
Старый 02.12.2011, 11:30   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

согласен)))
ну, для многих не секркет, что Selrct'ы нужны тем, кто аккуратно переписывает код, полученный с макрорекордера (как это часто делаю я).
после next можно добавить строку cells(r,c).select
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Увеличение/уменьшение изображения nikmay Мультимедиа в Delphi 2 18.02.2010 00:01
Уменьшение размера формул Fierce Microsoft Office Word 2 25.05.2009 10:25
Уменьшение длины имени Aндрей Помощь студентам 3 20.05.2009 16:52
уменьшение ширины таблицы Viteef HTML и CSS 5 18.02.2009 23:59
Увеличение и уменьшение картинок zzzzz Мультимедиа в Delphi 2 30.08.2008 20:53