我在A列中寻找可能存在或不存在的字符串值,因此我使用匹配类型1来查找不匹配的最小值。但是,Match函数返回意外值,具体取决于我提供的查找数组的 end 。
我的代码目前看起来像:
Dim SearchRange as Range
Dim EndRow as Integer
Dim CostCode as String
EndRow = 1118 'Value found in another part of code, no problems here
CostCode="01-420"
Set SearchRange=Sheets(1).Range("A1:A" & EndRow)
RowNum = Application.Match(CostCode, SearchRange, 1)
Debug.Print RowNum
成本代码01-420在该范围内不存在,但01-410在行109中。匹配函数应返回此(我认为),但它返回280.这远远超出许多更大的字符串A列中的值。如果我将搜索范围指定为A列的全部,则匹配返回128.如果我将范围指定为范围(" A1:A"& sheets(1).UsedRange.Rows。计数)或在A列中向下,我得到正确的行号。所有这三个范围都在同一个地方(AFAIK)开始,唯一的区别是它们的结束。如果Match返回一个相对值,为什么即使所有三个范围的开头都相同,它也会如此变化?
另外,如果我在A3开始范围(A1和A2为空白)并在1118结束,则匹配返回107而不是280.它找到正确的单元格并返回正确的相对位置,这有点与以上情况。我明白为什么更改范围的开始会返回行号 - 查找范围的开始的行号,但为什么在相同范围的末尾开始向下两行会产生如此不同的结果?有没有技术解释为什么会发生这种情况?
我可以将我的代码更改为只搜索A列中使用范围的范围,但我真的很想理解为什么这个函数会以这种方式运行。我用谷歌搜索并寻找类似的问题,但我发现的一切都与语法错误或对相对位置返回的误解有关。任何帮助表示赞赏。提前谢谢。
ETA:显然,我改变搜索范围并没有真正解决问题。我遇到过这样一种情况:Application.Match会多次找到正确的行,然后再向下几百行返回错误的行。如果有人有类似的问题,我感谢任何和所有的帮助。