이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.
안녕하세요
이번 지방기능경기대회에서 성적을 거두어 전국기능경기대회에나가는
고3 최종원이라고합니다..
여기와보니 제가이떄까지 쓴 코드는 정말 한마디로 허?접 ?하다 라고느껴질정도로
정말 코드는 넓고도 방대합니다..
여기서 야별님께 처음으로 질문드려봅니다..
제가올린파일중에 주소검색기 의 버튼중 주소 검색이라는 버튼이있습니다.
그런데
중복검색은 되긴됩니다 (예제:김민준)
하지만! 주소검색을할경우 이름을 입력하고 주소검색버튼을 누를시 검색이되는것인데
이상하게도 주소데이터시트를보시면
이름중 방재용까지밖에 검색이 되지않습니다..
그아래에 4개의 셀이더있는데
그 4개의셀까지 검색할수있는방법을알고싶습니다..
제생각에는 제코드가 틀렷다고하지않는데 왜틀린이유까지좀 알려주시면 감사하겠습니다..
댓글 '3'
아별입니다!!
중간에 야별님이라 하셨길래.. 한번 따라해봤습니다. ㅎㅎ
저렇게 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
안녕하세요? 최정원님..
전국기능경기대회에 출전하시는군요..
올해 지방기능경기대회 엑셀 문제가 학생들이 풀기에는 좀 어렵든데.. 훌륭하십니다. ^^)b
혹시.. 엑셀 과제에서 추가문제 뭐 나왔었는지 기억하시나요? ㅎㅎ
가끔 질문 들어올때가 있는데.. 추가 문제가 뭔지 몰라서.. 하하..
암튼..
"주소검색기"유저폼에서
Private Sub CommandButton2_Click() 프로시저의 For문에서
For K = 7 To .Range("b6").CurrentRegion.Rows.Count 라고 하셨는데..
K가 7부터 시작했기 때문에 To에는 현재 영역의 행수 + 7을 해주어야합니다.
현재 영역(CurrentRegion)은 6행부터 시작되기 때문에 중복된 행수를 제외시켜서 실제 데이터가 있는 행까지 지정하려면..
For K = 7 To .Range("b6").CurrentRegion.Rows.Count + 7 - 2 라고 코딩해주시면 되겠습니다.
되움이 되셨기를.. ^^
다운받기 : 2011전국-2.xlsm