![](/img/trans.png)
[英]How find a Range based on one criteria then a Cell within that Range based on another criteria
[英]Find Cell Range Based on Two Criteria
我已經將一些 VBA 放在一起,以找到符合我循環中當前值的特定標准的最后一行,然后采取行動。 此 VBA 代碼有效,直到我意識到工作表可以多次包含匹配值但在另一列中具有不同的日期。 所以我現在試圖向我的 VBA 添加第二個搜索條件。
這是截至目前的 VBA 片段。
For Each t In trans.Cells
On Error GoTo NxtT2
If t.Value = Empty Then
On Error GoTo 0
ty = t.Offset(0, -3).Value
tx = t.Offset(0, -6).Value
Set searchTerm = .Range("E:E")
Set where = searchTerm.Find(what:=ty, after:=searchTerm(1), searchdirection:=xlPrevious)
If t.Offset(0, -3).Value = where.Value And IsError(where.Offset(0, 3).Value) Then
t.Value = "#N/A"
End If
End If
NxtT:
On Error GoTo 0
If t.Offset(1, -3).Value = "" Then Exit For
Next t
NxtT2:
Resume NxtT
基本上我想要做的是使行Set where = searchTerm.Find(what:=ty, after:=searchTerm(1), searchdirection:=xlPrevious)
還包括tx
值以及已經存在的ty
在那里。
如果可能的話,像這樣的事情?
Set where = searchTerm.Find(what:=ty & tx, after:=searchTerm(1), searchdirection:=xlPrevious)
但我知道這不是正確的語法。
關於如何以最簡單的方式解決這個問題的任何建議?
不是原始問題的答案,而是我在即興代碼審查中創建的問題。
您的錯誤處理從未正確結束。 代碼仍然認為它在錯誤處理程序中,因為您使用Next
“退出”了錯誤處理程序,而您確實不能這樣做 - 您需要將這個錯誤處理的“實例”保留為Resume
。
給這個一個鏡頭,而不是清理錯誤處理。
注意:我聲明變量是因為我已經設置了Option Explicit
,你也應該有。 我做出了一個大膽的假設,即您已經在共享的代碼之外聲明了變量。 使用您聲明的變量,而不是我快速修補的Variant
聲明。
Sub foo()
Dim t As Variant
Dim ty As Variant
Dim tx As Variant
For Each t In Cells
On Error GoTo ErrorHandler
If t.Value = Empty Then
On Error GoTo 0
ty = t.Offset(0, -3).Value
tx = t.Offset(0, -6).Value
Dim searchterm As Range
Set searchterm = .Range("E:E")
Dim where As Range
Set where = searchterm.Find(what:=ty, after:=searchterm(1), SearchDirection:=xlPrevious)
If t.Offset(0, -3).Value = where.Value And IsError(where.Offset(0, 3).Value) Then
t.Value = "#N/A"
End If
End If
Continue:
Next
CleanExit:
Exit Sub
ErrorHandler:
If t.Offset(1, -3).Value = "" Then
Resume CleanExit
Else
Resume Continue
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.