Почему макрос VBA дает противоречивые результаты? - PullRequest
0 голосов
/ 03 февраля 2019

Я столкнулся с довольно странной ситуацией с моим макросом.Когда я запускаю его на одном и том же наборе данных, иногда он дает мне разные результаты.Набор данных не изменяется, макрос не касается исходных данных в любой момент.

Цель состоит в том, чтобы согласовать два довольно больших набора данных - данные, закодированные во временных интервалах (от-до), и данные, закодированные в отдельныхдней.Что я делаю, так это то, что я анализирую интервалы по дням, присваиваю каждой записи дня ключ сравнения, который содержит флаг, указывающий, что он взят из набора данных на основе интервалов (H).Для ежедневных данных я просто назначаю ключ сравнения с флагом, который соответствует ежедневному набору данных (T).

После этого я сбрасываю оба столбца с ключевыми линиями в один столбец, один под другим, и сортирую егоот самого большого до самого маленького.Результат выглядит следующим образом:

01/01/2019-stuff-H
01/01/2019-stuff-T
02/01/2019-stuff-H
02/01/2019-stuff-T
etc.

Оба набора данных довольно велики (сотни тысяч строк), и процессор занимает свое время - на моем довольно быстром ПК требуется около 3 минут, чтобы запустить всеопераций, в то время как на моем рабочем ноутбуке это занимает около 15 минут.

Ошибка возникает где-то на этапе копирования-вставки или сортировки - дамп иногда содержит повторяющиеся экземпляры той же строки изнабор данных H (интервалы разбиты на дни).

01/01/2019-stuff-H
01/01/2019-stuff-H
01/01/2019-stuff-T
02/01/2019-stuff-H
02/01/2019-stuff-T
etc.

Забавно то, что я смотрю на исходные данные и нет дублирования.Я смотрю в данные проанализированного интервала, и нет дублирования либо.Я не могу воспроизвести ошибку при попытке отладки кода и запуска его строки строка за строкой.

Код для этой части очень прост:

'last row of dump sheet
iLastDump = wsDump.Cells(wsDump.Rows.Count, "A").End(xlUp).Row
'last row of parsed interval data
iLastDay = wsDay.Cells(wsDay.Rows.Count, "A").End(xlUp).Row

'clear dumpsheet
wsDump.Range(wsDump.Cells(2, 1), wsDump.Cells(iLastDump + 1, 1)).ClearContents

'copy-paste parsed interval data (H-set) to dump sheet
wsDay.Range(wsDay.Cells(2, 10), wsDay.Cells(iLastDay, 10)).Copy (wsDump.Cells(2, 1))

'find new last row of dump sheet
iLastDump = wsDump.Cells(wsDump.Rows.Count, "A").End(xlUp).Row 

copy-paste daily data (T-set) into the dump file after the H-set
wsT.Range(wsT.Cells(2, 9), wsT.Cells(iLastT, 9)).Copy (wsDump.Cells(iLastDump + 1, 1))

'find new last row of dump sheet for later calculations
iLastDump = wsDump.Cells(wsDump.Rows.Count, "A").End(xlUp).Row 

'sort dumped data
wsDump.Range(wsDump.Cells(1, 1), wsDump.Cells(iLastDump, 1)).Sort key1:=wsDump.Cells(1, 1), order1:=xlAscending, Header:=xlYes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...