我创建了一个自定义类型,我称之为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)
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |