조회 수 1807 추천 수 0 댓글 0





엑셀 기타작업-2 폼 완성 문제 중




② <원아조회> 폼의 '원아명(txt원아명)'에 조회할 원아의 이름을 입력하고 <조회(cmd조회)> 버튼을 클릭하면


워크시트의 [표1]에 해당 데이터를 찾아 리스트 상자(lst원아정보)에 표시하고 해당 원아의 정보가 없는 경우에는 "조건에 일치하는 자료가 없습니다."라는 메시지 박스를 표시하는 프로시저를 작성하시오.


▶For Each ~ Next문을 이용하시오.




2012년 문제를 어렵지 않게 풀고 2011년 3회를 푸는데 


갑자기 이런 문제가 나와버렸다.





⑴<원아조회> 폼의 '원아명(txt원아명)'에 조회할 원아의 이름을 입력하고 <조회(cmd조회)> 버튼을 클릭하면


   워크시트의 [표1]에 해당 데이터를 찾아 리스트 상자(lst원아정보)에 표시




⑵ 해당 원아의 정보가 없는 경우에는 "조건에 일치하는 자료가 없습니다."라는 메시지 박스를 표시




이 문제는 요따우로 크게 두 가지를 요구하고 있다.




일단 표에 나와 있는 원아명 중 하나를 txt원아명에 입력하고 조회 컨트롤을 누르면 


해당 원아의 정보가 폼에 예쁘게 표시되도록 하는 것!




[표1] 보탬유치원

원아명 생년월일 성별 전화번호 주소 반명 입학년도

장명수 2010-05-09 333-1254 서교동 햇살반 2010

김승철 2006-04-25 332-4521 동교동 방울반 2007

정민호 2009-11-08 333-6592 서교동 병아리반 2009

박근호 2008-05-07 332-9562 망원동 코끼리반 2008

손수호 2007-09-12 333-1122 서교동 방울반 2007

김병수 2010-07-03 332-1595 성산동 햇살반 2011

구웅희 2008-05-06 332-3232 합정동 코끼리반 2008

양경민 2009-04-03 336-2562 동교동 병아리반 2009

이미연 2008-01-06 352-5672 서교동 코끼리반 2008

변기영 2009-05-03 336-5781 서교동 병아리반 2009

노진일 2006-12-08 334-6851 망원동 방울반 2007

채우리 2009-12-25 332-8546 합정동 햇살반 2010

성은희 2007-03-04 333-9548 합정동 방울반 2007

이만열 2007-09-30 332-9564 망원동 방울반 2007

김현진 2007-01-07 333-9568 서교동 햇살반 2007

정상욱 2008-08-08 334-5864 동교동 코끼리반 2008


이 것이 [표1]인데 사진 올리기 귀찮아서 그냥 워크시트에 있는 것을 복사했다.



이 표를 보고 있노라면 출제자의 정신상태가 심각하게 의심스러워진다. 




여자애 이름을 상욱, 병수, 민호 따위로 짓다니






아무튼 일반적인 VBA문제처럼 폼의 조회 컨트롤을 디자인보기로 더블 클릭하여 들어가면


Private Sub cmd조회_Click()


    


End Sub


라고 뜬다.




이제 저 가운데를 채워줘야 하는데




이 문제는 For Each ~ Next문을 사용하라고 했다.




For Each ~ Next문은 일반적으로 이렇게 구성된다.




For Each 개체변수 In 컬렉션 개체


실행문


Next 개체변수




이 문법의 의미는 




"컬렉션에 포함된 개체의 수만큼 실행문에 있는 명령 코드를 반복 실행한다." 이다.




정리하면




Private Sub cmd조회_Click()  <- 조회 버튼을 클릭하면


       For Each 개체변수 In 컬렉션 개체 <- 컬렉션 개체의 수만큼 실행문의 명령코드를 반복 실행


실행문


       Next


End Sub




여기서 원아명으로 조회하라고 했으니 


개체변수는 원아명이 되고 


컬렉션 개체는 그 원아명들이 들어있는 [표1]의 B4:B19가 된다.




정리하면~


일단 개체변수인 원아명을 aa라고 하자! 




그리고~


Private Sub cmd조회_Click()


        For Each aa In Range(" B4:B19") ->  B4:B19에 있는 원아명의 수만큼 반복 : 19-4+1=16이므로 16번 반복이다!


        Next


End Sub






이제 뼈대는 대충 갖췄으니 살을 붙여야 하는데~




실행문을 반복 중에 원아조회에 쓰인 원아명을 컬렉션 개체에서 찾은 경우를 생각해 보자.






Private Sub cmd조회_Click()


    For Each aa In Range("B4:B19")


        If aa = txt원아명 Then <- aa가 txt원아명에 쓰인 원아명과 같다면!




        End If


    Next


End Sub




여기까지 잘 따라오고 있나요?




그런 걸로 여기고 계속 갑니다~




원아명을 찾았으면 표시해야죠!!






Private Sub cmd조회_Click()


    For Each aa In Range("B4:B19")


        If aa = txt원아명 Then


        lst원아정보.RowSource = "표에 있는 해당 원아정보"  <- lst원아정보에 "표에 있는 해당 원아정보"를 지정해 줌.


        End If


    Next


End Sub




"표에 있는 해당 원아정보"  요따우로 쓸 순 없으므로




"표에 있는 해당 원아정보"를 셀 범위로 지정해야 하는 문제가 발생한다!




셀 범위는 B행번호:H행번호가 되는데




이 행번호는 원아명에 따라 변하는 수이기 때문에




우리는 여기서 '조회행'이라는 것을 지정해줘야 한다.




원아명은 4행에서 19행까지 있고


실행문을 실행할 때마다 1씩 증가해야 하므로


초기값을 3으로 주면 조회행(3) = 조회행(3) + 1 = 4 


즉 4행부터 조회시작! OK!




Private Sub cmd조회_Click()


    조회행 = 3 


    For Each aa In Range("B4:B19")


        조회행 = 조회행 + 1


        If aa = txt원아명 Then


        lst원아정보.RowSource = "B" & 조회행 & ":H" & 조회행 <- & 연산자를 활용하자! 시험에 자주 나온다!


  Exit For         


        End If


    Next


End Sub




이거스로 




⑴<원아조회> 폼의 '원아명(txt원아명)'에 조회할 원아의 이름을 입력하고 <조회(cmd조회)> 버튼을 클릭하면


   워크시트의 [표1]에 해당 데이터를 찾아 리스트 상자(lst원아정보)에 표시






요 부분은 해결!


자 이제 




⑵ 해당 원아의 정보가 없는 경우에는 "조건에 일치하는 자료가 없습니다."라는 메시지 박스를 표시




이제 이 부분을 풀어보자!




우선 조건에 일치했을 경우를 따져보자.




찾는 값이 있는 경우를 스위치 = 1


찾는 값이 없는 경우를 스위치 = 0 


이라고 하고




Private Sub cmd조회_Click()


    스위치 = 0 


    조회행 = 3 


    For Each aa In Range("B4:B19")


        조회행 = 조회행 + 1


        If aa = txt원아명 Then


        lst원아정보.RowSource = "B" & 조회행 & ":H" & 조회행


    스위치 = 1 <- 조건에 일치하는 값을 찾았다.


    Exit For <- For문을 나와랏


        End If


    Next


End Sub




그리고 반복 실행 후 찾지 못했을 경우에는 스위치 = 0에 해당하여 




Private Sub cmd조회_Click()


    스위치 = 0


    조회행 = 3


    For Each aa In Range("B4:B19")


        조회행 = 조회행 + 1


        If aa = txt원아명 Then


        lst원아정보.RowSource = "B" & 조회행 & ":H" & 조회행


    스위치 = 1


    Exit For


        End If


    Next


    If 스위치 = 0 Then <- 반복 실행했지만 조건에 일치하는 값을 찾지 못했다.


        MsgBox "조건에 일치하는 자료가 없습니다."


    End If


End Sub




짜잔 완성!!




휴~ 5점짜리 문제 하나 때문에 ~




그래도 알고 넘어가는 것이 좋다!!




으하하!



원본 출처 

http://sengyeo.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%ED%99%9C%EC%9A%A9%EB%8A%A5%EB%A0%A5-1%EA%B8%89-%EC%8B%A4%EA%B8%B0-2011%EB%85%84-3%ED%9A%8C-%EB%AC%B8%EC%A0%9C-%EC%A4%91-VBA


삭제 될때를 대비해서 직접 퍼왔습니다.



List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 컴퓨터 및 스마트 기기 사용팁 게시판 입니다. 좋은아빠되기 2014.10.15 690
58 한컴타자연습 윈도우 7 오류 해결 좋은아빠되기 2015.02.03 3287
» 컴활 1급 For Each 문에 관한 최신 문제 유형 좋은아빠되기 2014.12.05 1807
56 컴퓨터 어떻게 하면 잘할까? 1 좋은아빠되기 2014.10.15 749
55 제로보드 xe 홈페이지 스팸 하루 삭제 코드 좋은아빠되기 2014.10.16 476
54 윈도우용 Apache 2.4.X 와 PHP 5.6.X 설치 하기 file 좋은아빠되기 2015.06.24 5810
53 에어컨 전기료 절약 방법 : 냉방 Vs 제습 3 좋은아빠되기 2018.07.20 2180
52 아파치 httpd-mod-deflate 압축 설정 예시 좋은아빠되기 2014.10.16 418
51 아파치 http-mod-expires.conf 설정 좋은아빠되기 2014.10.16 384
50 아기 표준 성장 표(발육) file 좋은아빠되기 2014.10.20 1595
49 스크래치 프로그램 다운로드 좋은아빠되기 2014.12.08 1736
48 스마트폰 화면 캡쳐 하기 좋은아빠되기 2014.10.16 672
47 서버용 리눅스 뭐 깔지? 좋은아빠되기 2014.10.16 366
46 문자열 추출 문제 file 좋은아빠되기 2014.12.08 308
45 리눅스 동시 접속자수 확인 코드 좋은아빠되기 2014.10.16 837
44 다른 서버에 있을 파일을 ssh 를 통해 파일 및 폴더 복사(하위폴더 포함 하는법) 좋은아빠되기 2015.02.03 1330
43 ssh 포트 추가 및 변경 좋은아빠되기 2015.01.27 896
42 php 이전버전 다운로드 주소 좋은아빠되기 2015.02.04 606
41 mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11) 오류 대처 기록 2 좋은아빠되기 2014.12.11 1091
40 mysql 기본 DB 엔진 변경 좋은아빠되기 2017.06.03 265
Board Pagination Prev 1 2 3 Next
/ 3