С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 11.06.2018
Сообщений: 74
1

Как ускорить код (VBA Excel)?

16.11.2019, 17:26. Показов 1796. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет. Я тут написал код к простой програмке. Суть такая: выскакивает форма 4 опшен-кнопок (верх, низ, право, лево) и кнопка "ОК". На листе выделяем несколько не смежных областей на листе. А последняя 1 выделенная ячейка куда скопировать и вставить эти ячейки (в 1 строку). Вставка от последней выделенной ячейки будет вправо или влево или вверх или вниз. Все вроде работает, но есть 2 момента. 1-работает медленно. 2- если в выделенной зоне больше 1-го столбца, то ячейки считываются горизонтально (это логично). Как сделать чтобы считывались вертикально. Пример проги могу предоставить. Спасибо

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
**********************************************************************************************************
Private Sub CommandButton1_Click()
Dim r As Range, i%, c% '&-Long, %-Integer
Dim MyCell As Range
Dim a As String
Dim MyRow As Integer 'присваиваем значение ряда последней выд. области
Dim MyCol As Integer  'присваиваем значение колонки последней выд. области
 
Set r = Selection: ' Переменной (r) присваиваем выделенную область
c = r.Areas.Count 'в (с) помещаем количество вделенных несмежных"фрагментов-областей"
                          '(Areas.Count)4
 
 
For i = 1 To c
 
        r.Areas(i).Copy
        a = r.Areas(r.Areas.Count).Address
        MyRow = Range(a).row
        MyCol = Range(a).Column
                
                For Each MyCell In r
                    'MyCell.Select
                    MyCell.Copy
                    'Range(a).Select 'выделяем последнюю в ввыделенных областях
                    
                        If RightOpBtn.Value = True Then
                            MyCol = MyCol + 1 'стрелка показывает вправо
                            Cells(MyRow, MyCol) = MyCell 'переносим поочередно информацию в "последнюю ячейку"
                        ElseIf LeftOpBtn.Value = True Then
                            MyCol = MyCol - 1 'стрелка показывает влево
                            Cells(MyRow, MyCol) = MyCell 'переносим поочередно информацию в "последнюю ячейку"
                        ElseIf UpOpBtn.Value = True Then
                            MyRow = MyRow - 1 'стрелка вверх - на ряд выше
                            Cells(MyRow, MyCol) = MyCell 'переносим поочередно информацию в "последнюю ячейку"
                        ElseIf DownOpBtn.Value = True Then
                            MyRow = MyRow + 1 'стрелка вниз - на ряд ниже
                            Cells(MyRow, MyCol) = MyCell 'переносим поочередно информацию в "последнюю ячейку"
                        End If
                
                Next
        
        
        r.Areas(c).PasteSpecial
        Application.CutCopyMode = False ' убираем выделения
Next
 
End Sub
**********************************************************************************************************
0
Лучшие ответы (1)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
16.11.2019, 17:26
Ответы с готовыми решениями:

Ускорить работу excel, когда в ячейках много пользовательских функций на VBA
Когда вставляю в большое количество ячеек даже относительно простые функции на VBA, Excel всё равно...

Как составить короткий код VBA (Excel) для задачи?
Здравствуйте! Интересно, какой будет самый короткий код VBA для детской задачи ниже. Условия....

VBA+Word - как ускорить выполнение?
скрипт делает несложную обработку каждого абзаца текста, но выполняется слишком медленно. Можно...

Offset на VBA как ускорить процесс
Есть 2 листа. На одном листе вводятся данные по продажам и конечному остатку На другой лист эти...

2
Заблокирован
16.11.2019, 18:49 2
kabukijoe99, вычеркни строки с COPY
и про screenupdating поищи - почитай.
1
6975 / 2876 / 552
Регистрация: 19.10.2012
Сообщений: 8,760
16.11.2019, 23:30 3
Лучший ответ Сообщение было отмечено kabukijoe99 как решение

Решение

Ну и "переносим" замените на "копируем" - это не синонимы!
1
16.11.2019, 23:30
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
16.11.2019, 23:30
Помогаю со студенческими работами здесь

Задача в Excel в VBA код
Найти сумму n первых членов арифметической прогрессии, заданной двумя первыми членами

Помогите написать код в Excel на VBA
Нужно создать приложение реализующее поиск студентов успевающих на оценку введенную пользователем....

Как защитить VBA код в EXCEL?
Сделать нередактируемым или еще лучше - спрятать?

Как в программу VB вставить код записанный из VBA Excel?
Всем доброе время суток. Я начинаю изучать программирование на Visual Basic, и столкнулся с таким...

Работа с Excel средствами VB.net. Как перевести код из VBA в VB.net?
Коллеги, добрый день! Нужна помощь! В свое время был написан макрос для Excel, но прошло и...

VBA код Excel
'Создать новую книгу Excel Dim oExcel As Object Dim oBook As Object Dim oSheet As...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru