问题描述
Find
是否可以从范围的底部开始向上工作?
Is it possible for Find
to start from the bottom of a range and work up?
我希望我的代码首先找到位于主列表中的记录号.一旦它找到记录号,我希望它将该交易名称(记录号的 offset
)分配给一个变量,然后在主列表中搜索具有该名称的第一个交易.
I would like my code to first find a record number located on a master list. Once it finds the record number I want it to assign that deals name, an offset
of the record number, to a variable and then search up the master list for the first deal with that name.
我有代码可以找到记录号,将交易名称分配给一个变量,然后循环每个单元格,直到找到匹配项.虽然这种方式可行,但循环处理时间明显慢于查找处理时间,我正在寻找最快的解决方案.
I have code that finds the record number, assigns the deal name to a variable and then loops up each cell until it finds a match. Although this way works, the loop processing time is significantly slower than the find processing time and I am searching for the fastest solution.
如果不可能进行反向查找,那么 vlookup 会起作用吗?可能通过创建一个范围,从记录号上方的一行开始到顶部,并让 vlookup 找到最后一次出现?
If reverse find is not a possibility, would a vlookup work? Possibly by, creating a range beginning one row above the record number to the top and have vlookup find the last occurrence?
PendingBRow = ThisWorkbook.Sheets("PendingLog").Range("A65000").End(xlUp).Row
MasterBRow = ThisWorkbook.Sheets("MasterLog").Range("A65000").End(xlUp).Row
For D = 2 To PendingBRow
With ThisWorkbook.Sheets("PendingLog").Range("A" & D)
PendingRecNum = .Value
PendingDealName = .offset(0, 3).Value
PDLenght = Len(PendingDealName) - 4
PendingDealName = Left(PendingDealName, PDLenght)
PendingDealName = UCase(PendingDealName)
PendingDealName = Trim(PendingDealName)
End With
With ThisWorkbook.Sheets("MasterLog").Range("B2:B" & MasterBRow)
Set c = .Find(PendingRecNum, LookIn:=xlValues)
If Not c Is Nothing Then
firstRow = c.Row - 1
O = 1
Do Until firstRow = O
LastWorkedBy = ThisWorkbook.Sheets("MasterLog").Range("E" & firstRow).offset(0, 20)
MasterRecNum = ThisWorkbook.Sheets("MasterLog").Range("E" & firstRow).offset(0, -3).Value
dealName = ThisWorkbook.Sheets("MasterLog").Range("E" & firstRow).Value
dealName = Left(dealName, 10)
dealName = UCase(dealName)
dealName = Trim(dealName)
If PendingDealName = dealName Then
MasterLastWorkedBy = LastWorkedBy
ThisWorkbook.Sheets("PendingLog").Range("A" & D).offset(0, 19).Value = MasterLastWorkedBy
firstRow = O
Else
firstRow = firstRow - 1
End If
Loop
End If
End With
Next D
推荐答案
这将从底部 FIND():
Sub FindFromTheBottom()
Set a = Range("A:A").Find("Test", after:=Cells(1, 1), searchdirection:=xlPrevious)
MsgBox a.Address(0, 0)
End Sub
这篇关于在 VBA 中,从范围的底部向上执行 FIND的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!