VBA匹配功能无法使用大数字

时间:2016-07-25 19:50:04

标签: excel vba excel-vba

我创建了一个自定义类型,我称之为Run,其中一个值称为RunMOA。它存储一个String,它始终是一个12位数字。我有一系列这些运行,每个运行都有不同的MOA。我还有一张包含所有可能的MOA列的工作表,我试图遍历运行数组并获取该Run的相应MOA的行号(用于查找该表中的其他数据) )。

奇怪的是,这适用于一堆MOA,但不适用于特定的MOA。我做了一些游戏,它几乎似乎是由四舍五入等引起的错误。例如,这些MOA可以在列中找到:

200630031111,200630021593,200630021593,

但这些不是:

200000000443,2000000603,2000000444。

这里是遍历值的代码(NumRuns是运行数组的长度):

Dim i As Integer
For i = 0 To NumRuns - 1

    GetRun i, n, Schedule, SKUs

Next i

这里是应该将行号存储在变量中的行:

Row = Application.WorksheetFunction.Match(Val(Runs(i).RunMOA), Worksheets("Sheet1").Range(Cells(2, 1), Cells(n, 1))) - 1

当数字太大时,此功能是否有问题?当连续存在大量零时,它只会给我带来麻烦,我无法找到解释。我检查并仔细检查了这些MOA是否在列中,因此它们不会丢失。

1 个答案:

答案 0 :(得分:6)

您当前正在使用MATCH function的近似匹配,并且数据必须按升序排序,以使用默认的 match_type 值1.使用与 match_type 为0。

Row = Application.WorksheetFunction.Match(Val(Runs(i).RunMOA), Worksheets("Sheet1").Range(Cells(2, 1), Cells(n, 1)), 0) - 1
不过,这会更好,

dim rw as variant
rw = Application.Match(Val(Runs(i).RunMOA), Worksheets("Sheet1").Range(Cells(2, 1), Cells(n, 1)), 0)
if not IsError(rw) then
    rw = rw - 1
    'more operational code here
else
    ' match failed - deal with error
end if