为什么VBA宏会产生不一致的结果?

时间:2019-02-03 16:43:46

标签: excel vba

我的宏遇到了一个莫名其妙的情况。当我在完全相同的数据集上运行它时,偶尔会得到不同的输出。数据集不会更改,宏在任何时候都不会接触原始数据。

目的是调和两组相当大的数据-以时间间隔(从-到)编码的数据和以单日编码的数据。我要做的是将时间间隔解析为天,为每一天条目分配一个比较键,该键包含一个标志,表明它来自基于间隔的数据集(H)。对于每日数据,我只需为比较键分配一个来自每日数据集(T)的标志即可。

然后,我将带有关键点的两列都转储到一个列中,一个列放在另一个列之下,然后将其从最大到最小排序。结果看起来像这样:

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

两个数据集都非常大(成千上万行),而CPU却要花时间-在我相当快的PC上,运行所有操作大约需要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

0 个答案:

没有答案