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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2009, 05:52   #11
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Попробуйте предлагаемый ниже вариант, который должен работать значительно быстрее (65000 строк за единицы секунд).
Код:
Sub Main()
    Dim i As Long, j As Long, r As Long, c As Long, k As Long, a(), b()
    Application.ScreenUpdating = False
    r = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    c = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
    a = Range([A3], Cells(r, c)).Value: ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))
    k = 1
    For i = 1 To UBound(a, 1)
        If i Mod 5 = 0 Then
            For j = 1 To UBound(a, 2)
                b(k, j) = a(i, j)
            Next
            k = k + 1
        End If
    Next
    Range([A3], Cells(r, c)).ClearContents: Range([A3], Cells(UBound(b, 1), UBound(b, 2))).Value = b
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.04.2009, 11:31   #12
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

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

Еше раз поясню задачу, возможно не правильно сказал (не точно).
Есть таблица, которая содержит более 52000 строк, мне надо удалить лишние диапазоны строк. Првая которая остаеться номер 2, потом 8. то есть каждая шестая, удалять надо 3-7, потом 4-8 и т.д. до конца списка.

Последний раз редактировалось Vik-00; 17.04.2009 в 11:39.
Vik-00 вне форума Ответить с цитированием
Старый 17.04.2009, 11:57   #13
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А в Вашем первом посте написано:
Цитата:
строки должны удаляться так 3-6, затем 4-7, 5-8 и так далее до тех пор пока не кончаться значения в столбце A.
Поэтому все не так. Если нужно удалять каждую шестую, то строку кода
Код:
If i Mod 5 = 0 Then
замените на
Код:
If i Mod 6 = 0 Then
Макрос работает так:
Определяем последнюю строку и последний столбец использованного диапазона листа и все данные заносим в двумерный (строка Х столбец) массив "a". Затем создаем пустой массив "b" той же размерности. Организуем цикл по строкам массива, и как только строка становится кратной 6, то заносим все элементы столбцов в первую строку массива "b" (вторая размерность во внутреннем цикле). Это сделано для того, чтобы ячейки (строки) листа вообще не трогать, т.к. с памятью работать существенно быстрее. По окончании цикла, очищаем лист со строки 3 до конца и вставляем в ячейки данные из полученного массива "b".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.04.2009, 12:42   #14
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Да спасибо, все работает и очень быстро буквально 2-3 секунды. Надо изучить как работают эти двухмерные массивы и оптимизировать весь код.
Vik-00 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Удаление из ListBox строк S.T.A.L.K.E.R. Общие вопросы Delphi 2 27.09.2009 05:15
Удаление строк из Memo Leksda Общие вопросы Delphi 6 20.03.2009 15:31
Удаление строк Dr.Badnezz Общие вопросы Delphi 1 07.10.2008 15:22
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38