簡體   English   中英

根據兩個標准查找單元格范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM