2011-03-15 2 views
0

고유 한 기능을 갖고 싶습니다. 여러 워크 시트의 동일한 영역을 검색 할 수 있습니다. 내 생각은 일련의 시트 (통합 문서의 모든 시트)를 살펴보고 Find을 사용하여 해당 영역을 검색하는 것이 었습니다. 이제 검색이 첫 번째 시트에서 성공적으로 수행 된 경우 if 조건에 대해 다음에 대한 성공하지 못한 검색 결과를 덮어 쓰지 않으려합니다. 조건에서 찾기가 실패하면FIND가 결과를 반환하지 않을 때 기능이 종료됩니다.

Function SheetsFind(LookUpValue As Integer) As Variant 
    Dim SearchRange As Range 

    For Each WS In Sheets 
     Set SearchRange = WS.Range("A1:B6") 

     If (SearchRange.Find(LookUpValue, LookIn:=xlValues, LookAt:=xlWhole) <> "Nothing") Then 
      SheetsFind = SearchRange.Find(LookUpValue, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Value 
     End If 
    Next WS 

End Function 

문제는 지금, 기능은 남아와 나는 #value 오류가 발생합니다.

왜 내 기능이 다음 반복만으로 진행되는 것이 아닙니다.

답변

1

Range.Find가 다른 범위 개체를 반환하므로이 문제로 인해 문제가 발생합니다.

이 시도 :

Function SheetsFind(LookUpValue As Integer) As Variant 

    Dim SearchRange As Range 
    Dim oResult As Excel.Range 
    Dim ws As Worksheet 

    For Each ws In Sheets 
     Set SearchRange = ws.Range("A1:B6") 

     Set oResult = SearchRange.Find(LookUpValue, LookIn:=xlValues, LookAt:=xlWhole) 

     If Not oResult Is Nothing Then 

      SheetsFind = oResult.Offset(0, 1).Value 

     End If 

    Next ws 

End Function 
+0

완벽한을, 대단히 감사합니다. – stema

+0

이 함수를 워크 시트 함수로 사용하는 경우 휘발성으로 지정해야합니다. 그렇지 않으면 찾고있는 데이터가 변경 될 때 다시 계산되지 않습니다. 그리고 아마도 SheetsFind = oResult.Offset (0, 1) .Value 뒤에 Exit Function을 추가 할 것입니다. –