powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация программного кода
5 сообщений из 5, страница 1 из 1
оптимизация программного кода
    #34604159
fantomm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мой код:

Private Sub CommandButton1_Click()
Set sh58 = ThisWorkbook.Sheets("58 счет")
Set sh76 = ThisWorkbook.Sheets("76 счет")
Set sh = ThisWorkbook.Sheets("Сравнения")

sh.Cells.Clear
sh.Cells(1, 1) = "Вексель"
sh.Cells(1, 2) = "Дебет 58"
sh.Cells(1, 3) = "Кредит 58"
sh.Cells(1, 4) = "Дебет 76"
sh.Cells(1, 5) = "Кредит 76"

l = 1
For i = 2 To 51568
txt58 = sh58.Cells(i, 1)
l0 = l
For k = 2 To 10139
txt76 = sh76.Cells(k, 1)
If txt58 = txt76 Then
l = l + 1
sh.Cells(l, 1) = txt58
sh.Cells(l, 2) = sh58.Cells(i, 2)
sh.Cells(l, 3) = sh58.Cells(i, 3)
sh.Cells(l, 4) = sh76.Cells(k, 2)
sh.Cells(l, 5) = sh76.Cells(k, 3)
Exit For
End If
Next k
If l0 = l Then sh58.Cells(i, 4) = "нет"
Next i

End Sub

Он сравнивает данные одного листа с данными другого. Совпадающие выносит на лист Совпадения, а те которые не совпадают то на листе 58 счет проставляет нет.

Данных на одном листе более 50000 строк, на другом более 10000.

Проблема в том, что это все очень долго обрабатывается.

Может кто подскажет как оптимизировать прогшраммный код, чтобы программа работала быстрее?
...
Рейтинг: 0 / 0
оптимизация программного кода
    #34604212
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
оптимизация программного кода
    #34604247
fantomm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor оптимизация программного кода

Вы думаете я там не смотрел!
...
Рейтинг: 0 / 0
оптимизация программного кода
    #34604366
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fantomm vkodor оптимизация программного кода

Вы думаете я там не смотрел!
Я думаю, что надо читать правила форума,
а решение Вам уже подсказали, но могу ещё раз процитировать
Пользователь2Да, простой перебор работает очень долго, проверено.

Воспользуйся методами .Find и .FindNext, для того чтобы найти длинные номера и заменить их короткими из таблицы соответсвия.
...
Рейтинг: 0 / 0
оптимизация программного кода
    #34604414
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) попытайся применить Vlookup (ВПР) функцию листа
или
2) вместо
Код: plaintext
1.
2.
3.
4.
For k =  2  To  10139 
txt76 = sh76.Cells(k,  1 )
If txt58 = txt76 Then
...
Next k
попробуй
Код: plaintext
If Not sh76.Columns( 1 ).Find(txt58) Is Nothing Then
или
3) вместо поиска на листе, сделай массив значений первой колонки и ищи в нем
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация программного кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]