2016-08-03 16 views
0

Gibt es eine Möglichkeit, die FIND-Methode zu verwenden, um nach 1 von 2 alternativen Werten zu suchen? Set d = .Find(What:=[a OR b])Excel VBA Suchmethode mit 2 Suchwerten?

EDIT: Vielen Dank für die UNION Vorschläge. Ich hatte keine Ahnung, dass das möglich war, oder ich hätte ursprünglich mehr Details zur Verfügung gestellt, um die Frage klarer zu machen. Also hier ist ein zweiter Versuch:

Ich habe 3 Spalten. A ist mit Daten gefüllt. B ist ein Code. Und D ist, wo ich eine Funktion einfügen muss. Die Funktion wertet den Code in colB aus, und wenn der Code eine "2" ist, wird die FIND-Methode ausgeführt, um den nächsten vorherigen Code 1 OR 2 in colB zu finden, dann werden die Daten von colA in den zwei Zeilen subtrahiert. Zum Beispiel:

A  |B ...|D 
[date1] |5  |[function does nothing] 
[date2] |1  |[function does nothing] 
[date3] |3  |[function does nothing] 
[date4] |2  |[code 2 found, function inserts result of [date4]-[date2] 

(letzte Zeile würde gleich sein, wenn der 2. Zeile 2 einen Code hatte anstelle eines 1)

Hier ist der Code, den ich habe jetzt:

Private Function FindPrevActionCode(ActionCodeCell As Range, SearchCode As Byte) 

'ActionCodeCell is the cell to check, search the value of that cell 
'SearchCode is the code to look for 

Dim d As Range 'Holds result of Find method 

If ActionCodeCell.Value = 2 Then 
    With Worksheets(AppTab).Columns(cnAppActionCode) 
     Set d = .Find(What:=SearchCode, After:=ActionCodeCell, _ 
     LookIn:=xlValues, LookAt:= _ 
     xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _ 
     MatchCase:=False, SearchFormat:=False) 
    End With 

FindPrevActionCode = Cells(ActionCodeCell.row, cnAppTransEffDate).Value 
- Cells(d.row, cnAppTransEffDate).Value 


End If 
End Function 
+0

Können Sie die Suchmethode für jeden gewünschten Wert ausführen und sie dann zusammenfügen? –

+0

Warum VBA und keine Formel? –

Antwort

1

Sie zwei tun können separate Suchen und dann die Union Funktion verwenden, um die zwei Ranges zu kombinieren. Zum Beispiel:

Option Explicit 

Sub TestUnionFind() 

    Dim rngSearch1 As Range 
    Dim rngSearch2 As Range 
    Dim rngUnionSearch As Range 

    Set rngSearch1 = Sheet1.Cells.Find(What:="A") 
    Set rngSearch2 = Sheet1.Cells.Find(What:="B") 
    Set rngUnionSearch = Union(rngSearch1, rngSearch2) 

    Debug.Print rngUnionSearch.Address 

End Sub 
0

Sie müssen jede Suche separat durchführen.

Set d = .Find(What:=a, After:=ActionCodeCell, LookIn:=xlValues, _ 
LookAt:= xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _ 
MatchCase:=False, SearchFormat:=False) 

If d is Nothing Then 

    Set d = .Find(What:=b, After:=ActionCodeCell, LookIn:=xlValues, _ 
    LookAt:= xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _ 
    MatchCase:=False, SearchFormat:=False) 

End If