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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2013, 17:28   #1
Андрей5
Новичок
Джуниор
 
Регистрация: 10.03.2013
Сообщений: 2
По умолчанию Очень медленное копирование?

Здравствуйте,уважаемые форумчане.Я написал не сложный макрос,но при копировании такого количества строк ,он работает больше пяти минут на одном листе.Пробовал делать на массиве are(),но как для массива are указать , переделать эту строку , не получается: d = Cells(a + k, Columns.count).End(xlToLeft).Column

Sub КОПИР()
Dim a&, f&, w&, t&, e&, k&, l&, g&, v&, x&, d&
Application.ScreenUpdating = False
Dim ta: ta = Timer
a = 152
l = 1
v = 1
g = 1
x = 31
For w = 1 To 64
For e = 1 To 128
For t = 1 To 7
k = k + 1
d = Cells(a + k, Columns.count).End(xlToLeft).Column
Range(Cells(a, l + 4), Cells(a, x)).Copy Cells(a + k, d + f)
d = Cells(a + k, Columns.count).End(xlToLeft).Column
Range(Cells(a, g), Cells(a, v + 2)).Copy Cells(a + k, d + 2)
l = l + 4
v = v + 4
Next t
f = 2
l = l + 4
v = v + 4
g = g + 32
x = x + 32
k = 0
Next e
f = 0
l = 1
v = 1
g = 1
x = 31
b = 1
a = a + 21
Next w
MsgBox Timer - ta
Application.ScreenUpdating = True
End Sub
Андрей5 вне форума Ответить с цитированием
Старый 10.03.2013, 23:57   #2
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от Андрей5 Посмотреть сообщение
Здравствуйте,уважаемые форумчане.Я написал не сложный макрос,но при копировании такого количества строк ,он работает больше пяти минут на одном листе.Пробовал делать на массиве are(),но как для массива are указать , переделать эту строку , не получается: d = Cells(a + k, Columns.count).End(xlToLeft).Column

Sub КОПИР()
Dim a&, f&, w&, t&, e&, k&, l&, g&, v&, x&, d&
Application.ScreenUpdating = False
Dim ta: ta = Timer
a = 152
l = 1
v = 1
g = 1
x = 31
For w = 1 To 64
For e = 1 To 128
For t = 1 To 7
k = k + 1
d = Cells(a + k, Columns.count).End(xlToLeft).Column
Range(Cells(a, l + 4), Cells(a, x)).Copy Cells(a + k, d + f)
d = Cells(a + k, Columns.count).End(xlToLeft).Column
Range(Cells(a, g), Cells(a, v + 2)).Copy Cells(a + k, d + 2)
l = l + 4
v = v + 4
Next t
f = 2
l = l + 4
v = v + 4
g = g + 32
x = x + 32
k = 0
Next e
f = 0
l = 1
v = 1
g = 1
x = 31
b = 1
a = a + 21
Next w
MsgBox Timer - ta
Application.ScreenUpdating = True
End Sub
пример то чего вы копируете в экселевском файле скиньте, сделаем на массивах!
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 11.03.2013, 00:07   #3
Андрей5
Новичок
Джуниор
 
Регистрация: 10.03.2013
Сообщений: 2
Радость

Спасибо за помощь сам слепил себе макрос ,старый работал 325 секунд,а это работает 20 секунд,для меня очень не плохо.

Sub КОПИР()
Dim i&, a&, d&, k&, arr()
Dim ta: ta = Timer
arr = [a152:fam1482].Value: k = 1
For i = LBound(arr, 1) To UBound(arr, 1)
d = d + 1
For a = LBound(arr, 2) To UBound(arr, 2) Step 32
arr(i + k, a) = arr(i, a + 4)
arr(i + k, a + 1) = arr(i, a + 5)
arr(i + k, a + 2) = arr(i, a + 6)
arr(i + k, a + 4) = arr(i, a + 8)
arr(i + k, a + 5) = arr(i, a + 9)
arr(i + k, a + 6) = arr(i, a + 10)
arr(i + k, a + 8) = arr(i, a + 12)
arr(i + k, a + 9) = arr(i, a + 13)
arr(i + k, a + 10) = arr(i, a + 14)
arr(i + k, a + 12) = arr(i, a + 16)
arr(i + k, a + 13) = arr(i, a + 17)
arr(i + k, a + 14) = arr(i, a + 18)
arr(i + k, a + 16) = arr(i, a + 20)
arr(i + k, a + 17) = arr(i, a + 21)
arr(i + k, a + 18) = arr(i, a + 22)
arr(i + k, a + 20) = arr(i, a + 24)
arr(i + k, a + 21) = arr(i, a + 25)
arr(i + k, a + 22) = arr(i, a + 26)
arr(i + k, a + 24) = arr(i, a + 28)
arr(i + k, a + 25) = arr(i, a + 29)
arr(i + k, a + 26) = arr(i, a + 30)
arr(i + k, a + 28) = arr(i, a)
arr(i + k, a + 29) = arr(i, a + 1)
arr(i + k, a + 30) = arr(i, a + 2)
Next a
If d = 7 Then i = i + 14: d = 0
Next i
[a152:fam1482].Value = arr
MsgBox Timer - ta
End Sub
Андрей5 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
медленное накладывания png картинок dmitriegorovih Мультимедиа в Delphi 2 23.12.2012 08:30
dataGridView медленное заполнение .scu C# (си шарп) 1 17.07.2012 19:39
медленное usb Андрей К. Компьютерное железо 6 02.12.2010 06:56
DataGridView - медленное отображение avd Общие вопросы .NET 1 04.07.2010 11:22
как сделать медленное появление текста в программе? BARS1991 C++ Builder 12 15.11.2009 15:07