Public Function abyulFind(rngSrc As Range, strFind As String, dblLookAt As Double, Optional rngAfter As Range) Dim rngFind As Range, varFind() As Variant If rngAfter Is Nothing Then Set rngAfter = ActiveCell Set rngFind = rngSrc.Find(What:=strFind, LookAt:=dblLookAt, After:=rngAfter) If rngFind Is Nothing Then abyulFind = vbNullString Exit Function End If
Dim cnt As Double: cnt = 0 Dim rngAddress As String: rngAddress = rngFind.Parent.Name & "!" & rngFind.Address Do ReDim Preserve varFind(cnt) varFind(cnt) = "'" & rngFind.Parent.Name & "'" & "!" & rngFind.Address Set rngFind = rngSrc.FindNext(After:=rngFind) If "'" & rngFind.Parent.Name & "'" & "!" & rngFind.Address = varFind(0) Then Exit Do cnt = cnt + 1 Loop
abyulFind = varFind
End Function
'### 호출해서 사용하는 것은 이런 식으로..
Sub findFunction() Dim varFind As Variant varFind = abyulFind(cells, "김민종", xlWhole, cells(1, 1))
If TypeName(varFind) = "Variant()" Then MsgBox "총 " & UBound(varFind) + 1 & "개의 결과가 있습니다." Dim i As Double, rngFind As Range For i = 0 To UBound(varFind) Range(varFind(i)).Select Next i Else MsgBox "해당하는 값이 없습니다." End If End Sub
아별입니다!!
중간에 야별님이라 하셨길래.. 한번 따라해봤습니다. ㅎㅎ
저렇게 for문으로 순환하면서 if문으로 특정값을 찾는 것은..
데이터가 작은 경우 별 문제가 없지만.. 데이터가 몇 만 줄 이상일때는 효율적인 방법은 아닙니다.
.Find메서드를 사용해볼 것을 권장합니다.
최종원님의 방법의 경우 중복되는 항목이 2개 이상일 경우는 대응이 안되는데요..
음.. 좀 복잡하지만.. 실무 레벨에서 사용할 법한 코딩을 알려드립니다.
그저 참고하시길..
기능경기대회의 채점 기준이 어떻게 되는지 몰라서 알려드리기 애매합니다만..
이런 것도 있구나 정도로 참고하심이.. ^_^;;
제가 코드를 수정한 참고 파일 다운 받아보시길..
다운받기 : 2011전국-3.xlsm
[ 참고 코드 ]
'### 변수를 던져주면 일치하는 셀들의 주소를 배열로 리턴해주는 함수
'### abyulFind(찾을범위, 찾을 값, 정확히일치여부, 찾을 기준셀)
Public Function abyulFind(rngSrc As Range, strFind As String, dblLookAt As Double, Optional rngAfter As Range)
Dim rngFind As Range, varFind() As Variant
If rngAfter Is Nothing Then Set rngAfter = ActiveCell
Set rngFind = rngSrc.Find(What:=strFind, LookAt:=dblLookAt, After:=rngAfter)
If rngFind Is Nothing Then
abyulFind = vbNullString
Exit Function
End If
Dim cnt As Double: cnt = 0
Dim rngAddress As String: rngAddress = rngFind.Parent.Name & "!" & rngFind.Address
Do
ReDim Preserve varFind(cnt)
varFind(cnt) = "'" & rngFind.Parent.Name & "'" & "!" & rngFind.Address
Set rngFind = rngSrc.FindNext(After:=rngFind)
If "'" & rngFind.Parent.Name & "'" & "!" & rngFind.Address = varFind(0) Then Exit Do
cnt = cnt + 1
Loop
abyulFind = varFind
End Function
'### 호출해서 사용하는 것은 이런 식으로..
Sub findFunction()
Dim varFind As Variant
varFind = abyulFind(cells, "김민종", xlWhole, cells(1, 1))
If TypeName(varFind) = "Variant()" Then
MsgBox "총 " & UBound(varFind) + 1 & "개의 결과가 있습니다."
Dim i As Double, rngFind As Range
For i = 0 To UBound(varFind)
Range(varFind(i)).Select
Next i
Else
MsgBox "해당하는 값이 없습니다."
End If
End Sub