Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация программного кода / 5 сообщений из 5, страница 1 из 1
19.06.2007, 11:45:44
    #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
19.06.2007, 11:55:54
    #34604212
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация программного кода
...
Рейтинг: 0 / 0
19.06.2007, 12:02:39
    #34604247
fantomm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация программного кода
vkodor оптимизация программного кода

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

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

Воспользуйся методами .Find и .FindNext, для того чтобы найти длинные номера и заменить их короткими из таблицы соответсвия.
...
Рейтинг: 0 / 0
19.06.2007, 12:35:23
    #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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация программного кода / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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