1. FAQ
  2. 엑셀(Excel)
  3. AfterEffects
  4. Premiere
  5. Photoshop
  6. ETC

이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.

[레벨:30]아별

2012.08.07 16:14

아별입니다!!

중간에 야별님이라 하셨길래.. 한번 따라해봤습니다. ㅎㅎ

 

저렇게 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

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)