如何将 SearchDirection 应用于查找第一次出现?

How to apply SearchDirection to Find first occurrence?

在 MS Excel 中,我有 VBA 代码在一个范围内查找一个月中的天数。

范围像 1,2,3,...,30,1()因为有些月份有 30 天,有些月份有 31 天。

当试图在范围内找到“1”时,代码总是给出第二个“1”作为结果。

当我从范围中删除第二个“1”时,它给出了正确的结果。

“SearchDirection”在这种情况下似乎什么都不做。

day = 1
Set findday = findmonth.Find(day, LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, SearchOrder:=xlByColumns)
Debug.Print findday.Address

查找方法'Failure'

  • 如果您将 xlValuesLookIn 参数一起使用,那么如果您希望找到值的行或列被隐藏,Find 将 'fail'找到它。
  • 默认情况下,Find 方法对 SearchDirection 使用 xlNext,因此您可以省略它。
  • 您的问题肯定是省略了 After 参数。 问题是,如果您输入第一个单元格 (A1) 作为 After 参数的参数(默认情况下是 (A1)),搜索将从 A2 如果 xlByColumnsB1 如果 xlByRows。因此,您必须为 Find 方法指定范围内的最后一个单元格,以使用范围内的第一个单元格 (A1).
  • 开始搜索

例如:

Day = 1
Set findday = findmonth.Find( _
    What:=Day, _
    After:=findmonth.Cells(findmonth.Rows.Count, findmonth.Columns.Count), _
    LookIn:=xlFormulas, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByColumns, _
    SearchDirection:=xlNext)
Debug.Print findday.Address

或者如果您更喜欢一排:

Dim findday As Range
Day = 1
Set findday = findmonth.Find(What:=Day, After:=findmonth.Cells(findmonth.Rows.Count, findmonth.Columns.Count), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)
Debug.Print findday.Address

使用 With 语句可以使其更具可读性:

Day = 1
With findmonth
    Set findday = .Find(What:=Day, After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns)
End With
Debug.Print findday.Address