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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2013, 17:19   #1
vostok
Форумчанин
 
Регистрация: 29.04.2009
Сообщений: 119
По умолчанию ограничить количество строк

Добрый вечер друзья. Всех с Новым Годом!
Прошу помощи, здесь мне однажды написали код для вставки в последнюю пустую строку, успешно им пользуюсь, вот он:

ActiveSheet.Unprotect
[b4:j13].Copy
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Range("f4:f13,b4:b13,g5:g13").Selec t
Selection.ClearContents
Range("H4").Select
ActiveCell.FormulaR1C1 = "=RC[23]"
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowSorting:=True, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells
Range("b4").Select
End Sub

Вопрос такой: а нельзя изменить выделенную часть кода, чтобы он искал пустую строку не до конца листа (66 с лишним тысяч строк ведь), а лишь, допустим, до 4000-й строки? Мне кажется, это ускорит выполнение кода, или ошибаюсь?
Оптимизирую сейчас рабочие книги, вот, задумался...
vostok вне форума Ответить с цитированием
Старый 01.01.2013, 18:28   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

vostok, я сделал циклы со 100 000 итерациями (витками) и разница оказалась в 0,2 секунды. Т.е. эту часть кода можно не оптимизировать.

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

И нужно избавиться от Select.
Скрипт вне форума Ответить с цитированием
Старый 01.01.2013, 18:54   #3
vostok
Форумчанин
 
Регистрация: 29.04.2009
Сообщений: 119
По умолчанию

Как избавиться? Это основная операция по сбору данных, как ее иначе сделать, если не через копипаст. И select чем не угодил? Надо избирательно очистить столбцы.
vostok вне форума Ответить с цитированием
Старый 01.01.2013, 19:31   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Этот кусок следует переписать так:
Код:
ActiveSheet.Unprotect
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Resize(10, 9).Value = [b4:j13].Value
Range("f4:f13,b4:b13,g5:g13").ClearContents
Range("H4").FormulaR1C1 = "=RC[23]"
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowSorting:=True, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells
Range("b4").Select 'надо ли?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.01.2013, 19:35   #5
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от vostok Посмотреть сообщение
...select чем не угодил?
Селекты тормозят код

Без них, но с копированием:
Код:
Sub vostok()
 ActiveSheet.Unprotect
  [b4:j13].Copy
  Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
   Range("f4:f13,b4:b13,g5:g13").ClearContents
   Range("H4").FormulaR1C1 = "=RC[23]"
  ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
  False, AllowSorting:=True, AllowFiltering:=True
 ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 02.01.2013, 00:35   #6
vostok
Форумчанин
 
Регистрация: 29.04.2009
Сообщений: 119
По умолчанию

Парни, спасибо, опробовал оба кода, от Казанского - супер, очень быстро, я даже не вижу выделения вставляемой таблицы, но у меня шустрый комп, а работа на слабых машинах, проверю там завтра. Селект "b4" - надо, курсор после очистки должен установиться в начальную ячейку для ввода. Код от Сергея тормозит, выполняется 5 секунд
Спасибо за отзывчивость!
vostok вне форума Ответить с цитированием
Старый 02.01.2013, 03:11   #7
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от vostok Посмотреть сообщение
Код от Сергея тормозит, выполняется 5 секунд
Это ВАШ код, я только убрал селекты
Скрипт советовал ещё "избавиться от копирования и вставки" (что и сделал Казанский)
Результат видите?
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 02.01.2013, 18:42   #8
vostok
Форумчанин
 
Регистрация: 29.04.2009
Сообщений: 119
По умолчанию

Проверил, все просто замечательно, работает быстро, как и хотелось. Нет видимого выделения пока таблицы, потом места для нее в нижнем списке. Спасибо еще раз!
vostok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сканирования строк. Зная количество строк и первый элемент, это количество символов с троке. dimon9 Общие вопросы C/C++ 8 02.11.2012 22:40
Потоки, как ограничить количество? bakanaev Общие вопросы Delphi 2 16.08.2012 16:55
Ограничить количество запуска программы Tuman777 Общие вопросы Delphi 12 15.10.2011 20:27
как ограничить количество вводимых чисел пользователем? Kati Помощь студентам 4 21.10.2010 11:56
Ограничить количество клиентов SwiP Работа с сетью в Delphi 1 16.06.2010 19:17