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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 19:59   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Копирование части диапазона с шагом

Всем, Добрый вечер!
Подскажите, правильно ли сделал?
Из диапазона d3:d1353, лист1, нужно скопировать [d3:d33] и вставить в d3 с шагом 44 во все, девять, листов, не нравится, что листы переключаются и долго.
Код:
Sub копирование()
Dim dIap As Long, iList As Byte: dIap = 3
For iList = 1 To 9
    Sheets(1).[e3:e33].Copy
        Sheets(iList).Select
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        If iList = 1 Then dIap = 47
       Do
        .Cells(dIap, 5).Select
            .ActiveSheet.Paste
            dIap = dIap + 44
        Loop While Not dIap > 1323: dIap = 3
            .CutCopyMode = False
            .EnableEvents = True
        .ScreenUpdating = True
    End With
Next
End Sub
Теперь быстро!!

Последний раз редактировалось valerij; 07.12.2009 в 21:56.
valerij вне форума Ответить с цитированием
Старый 07.12.2009, 22:02   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Вот Вам еще вариант
Код:
Sub копирование()
    Dim rDiap As Range
    Dim li As Long, le As Long
    Application.EnableEvents = False: Application.ScreenUpdating = False
    Set rDiap = Sheets(1).Range("e3:e33")
    For le = 1 To 9
    With Sheets(le)
        For li = 0 To 1323 Step 44
            rDiap.Copy .Range(rDiap.Offset(li).Address)
        Next li
    End With
    Next le
    Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 07.12.2009, 22:47   #3
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте valerij.
не тестировал, но думаю будет быстрее
Код:
Sub копирование2()
Dim i%, j%
Sheets(1).[e3:e33].Copy
With Application
    .ScreenUpdating = False
    For j = 1 To 9
        For i = 3 To 1323 Step 44
            Sheets(j).Cells(i, 5).PasteSpecial Paste:=xlPasteAll
        Next
    Next
    .ScreenUpdating = True
End With
End Sub
Евгений.

Последний раз редактировалось Teslenko_EA; 07.12.2009 в 22:53.
Teslenko_EA вне форума Ответить с цитированием
Старый 07.12.2009, 22:49   #4
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Вот Вам еще вариант
ОК!!!!!!!!
Спасибо!!!
Женя, сейчас проверю!!
Ошибка, причем указывает, сюда, это макрос книги
If Not Intersect(Target, .Cells) Is Nothing Then

Последний раз редактировалось valerij; 07.12.2009 в 22:58.
valerij вне форума Ответить с цитированием
Старый 08.12.2009, 00:14   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Женя, была ошибка, исправил(красным), синим-добавил, все стало ОК!
Скорость исполнения у всех, троих ~ =, но у The_Prist и у меня, после выполнения макроса отсутствует выделение и курсор там где и был, выделение снял, но остался выбор диапазона в конце [e1323:e13553] в каждом листе, т. е. курсор, если в начале исполнения макроса, был в [a1], то после перемещается на [e1323:e13553]
Код:
Sub копирование2()
Dim i%, j%, p%: p = 3
Sheets(1).[e3:e33].Copy
With Application
    .EnableEvents = False
    .ScreenUpdating = False
    For j = 1 To 9
        If j = 1 Then p = 47
        For i = p To 1323 Step 44
            Sheets(j).Cells(i, 5).PasteSpecial Paste:=xlPasteAll
        Next: p = 3
    Next
     .CutCopyMode = False
    .EnableEvents = True
    .ScreenUpdating = True
End With
End Sub
В общем, СПАСИБО!!!
valerij вне форума Ответить с цитированием
Старый 08.12.2009, 17:53   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте valerij.
"Скорость исполнения ... ~ =", слишком субъективная оценка, не приемлема для анализа, рекомендую использовать более точный "инструмент":
Код:
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Sub testProcedure()
Dim q&
q = timeGetTime
    'body test
Debug.Print timeGetTime - q
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование части данных ячейки Doszhan Microsoft Office Excel 15 04.11.2011 07:49
функция: копирование части строки в другую строку plasticman Microsoft Office Excel 1 18.03.2009 15:30
Копирование части экрана консоли в C# Skrutik Общие вопросы .NET 3 03.03.2009 19:13
Выделение и копирование части документа на основе структуры файла satyr_of_frost Microsoft Office Word 23 12.02.2009 09:15
Суммирование ячеек с заданным шагом valerij Microsoft Office Excel 10 10.10.2007 00:22