The okk
 
  
  Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору griin    Код:   Конкатенация (&) - довольно тормознутая операция. Лучше вместо этого пиши:    Код:. Эффект будет тот же (обращение к k-й строке 1-го столбца), но работать будет быстрее.    Код:|  "=ДАТА(ГОД(Y" & k & "), МЕСЯЦ(Y" & k & "), ДЕНЬ(A8))"   |      Эта запись мне тоже не нравится. Я так понял, тут есть цикл со счетчиком k, поэтому четыре конкатенации в данном случае - явный перебор. Есть же замечательный стиль ссылок R1C1 (альтернатива А1). Его и надо использовать. Тогда получится:    Код:|  "=ДАТА(ГОД(RC25); МЕСЯЦ(RC25); ДЕНЬ(R8C1))"  |      RC25 расшифровывается, как: ячейка в том же ряду, в 25-м по счету столбце (Y).   Стиль ссылок R1C1 на самом деле довольно прост:   R (Row, Ряд/Строка). Число после этой буквы соответствует номеру строки (абсолютная ссылка).    Например, R1 - ссылка на первую строку.   Если число после R стоит в квадратных скобках ([ ]), это смещение по строкам относительно текущей ячейки (относительная ссылка).   Например, R[-1] - ссылка на строку, стоящую над текущей ячейкой.   C (Column, Столбец/Колонка) Действуют те же правила, что и для R.   - Ну и, соответственно, исправляем левую часть: 
  Вместо  Код: ставим  Код:    - В итоге имеем: 
   Код:|  Cells(k,1).FormulaR1C1Local="=ДАТА(ГОД(RC25); МЕСЯЦ(RC25); ДЕНЬ(R8C1))"  |       - Теперь доводим до ума сам код - избавимся от цикла. 
   Код: меняем на:    Код:|  Range(Cells(k1,1),Cells(k2,1))  |   , где k1 - это начальное значение счетчика k, указанное в твоем цикле;   k2 - соответственно, конечное значение счетчика. Сама запись Range(Cells(k1,1),Cells(k2,1)) возвращает диапазон ячеек от ячейки Cells(k1,1) до Cells(k2,1).   В итоге весь цикл записывается в одно действие:    Код:|  Range(Cells(k1,1),Cells(k2,1)).FormulaR1C1Local="=ДАТА(ГОД(RC25); МЕСЯЦ(RC25); ДЕНЬ(R8C1))"  |   Что в переводе на нормальный язык значит:   Всем ячейкам в первом столбце в диапазоне от k1-й строки до k2-й присвоить формулу. - Если будут тормоза, можно ускорить выполнение кода, отключив обновление экрана и калькуляцию формул на время заполнения диапазона формулами.: 
   Код: '...в приложении   With Application         '...отключаем обновление экрана         .ScreenUpdating = False         '...и устанавливаем пересчет формул вручную         .Calculation = xlCalculationManual   End With   'заполняем диапазон формулами   Range(Cells(k1,1),Cells(k2,1)).FormulaR1C1Local="=ДАТА(ГОД(RC25); МЕСЯЦ(RC25); ДЕНЬ(R8C1))"      'в приложении...   With Application         '...включаем обновление экрана...         .ScreenUpdating = True         '...и устанавливаем автоматический пересчет формул         .Calculation = xlCalculationAutomatic   End With     |           И не забывай, что если пишешь формулу на русском, то ставится не , а ;.      Добавлено:   Anton T   Цитирую оттуда:    Цитата:|  данная программа «просматривает» построчно все записи на рабочем листе Excel. Для тех строк, для которых заданное условие поиска не соблюдено, изменяется высота строки, которая задается равной нулю. В результате на экране остаются только те строки, которые удовлетворяют заданному критерию. Таким «оригинальным» путем, фактически без установки фильтра, пользователь получает возможность видеть на экране только те строки, которые он ищет.  |      Честно говоря, меня выделенный фрагмент описания немного шокировал. Либо я неправильно понял, либо... Из написанного я делаю вывод, что это проход в цикле по строкам (а во внутреннем цикле еще и по столбцам?!), да не просто проход, а с самописным(!) текстовым поиском и присваиванием значений числовым свойствам (вместо элементарного изменения логического свойства видимости на False). Я, конечно, проверю, что занимает меньше времени - скрыть строку или приравнять значение её высоты к нулю, но, честно говоря, сомневаюсь, что результат будет в пользу второго варианта. Кроме того, при таком подходе скрытые ячейки все еще остаются видимыми со всеми вытекающими последствиями. |   Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено:  09:50 08-02-2007  | Исправлено: The okk,   13:17 08-02-2007    |  
  |