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

1 excel vba excel-vba

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

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

200630031111,200630021593,200630021593,

但这些不是:

200000000443,200000000603,2000000444.

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

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

    GetRun i, n, Schedule, SKUs

Next i
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 6

您当前正在使用MATCH函数的近似匹配,并且必须按升序对数据进行排序,以使用默认的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
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这会更好,因为,

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
Run Code Online (Sandbox Code Playgroud)