如何将 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'
- 如果您将
xlValues
与 LookIn
参数一起使用,那么如果您希望找到值的行或列被隐藏,Find
将 'fail'找到它。
- 默认情况下,
Find
方法对 SearchDirection
使用 xlNext
,因此您可以省略它。
- 您的问题肯定是省略了
After
参数。
问题是,如果您输入第一个单元格 (A1
) 作为 After
参数的参数(默认情况下是 (A1
)),搜索将从 A2
如果 xlByColumns
或 B1
如果 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
在 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'
- 如果您将
xlValues
与LookIn
参数一起使用,那么如果您希望找到值的行或列被隐藏,Find
将 'fail'找到它。 - 默认情况下,
Find
方法对SearchDirection
使用xlNext
,因此您可以省略它。 - 您的问题肯定是省略了
After
参数。 问题是,如果您输入第一个单元格 (A1
) 作为After
参数的参数(默认情况下是 (A1
)),搜索将从A2
如果xlByColumns
或B1
如果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