조회 수 1808 추천 수 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
59 apache mysql 연동시 서버가 한달에? 한번씩 다운된다면?? 1 좋은아빠되기 2015.01.08 166
58 My-SQL 이전버전 다운로드 주소 좋은아빠되기 2015.02.03 193
57 my-sql utf8 변경시 할일 좋은아빠되기 2017.05.27 202
56 centos 6 저장소 추가 좋은아빠되기 2017.06.03 205
55 apache 압축 deflate 테스트 사이트 좋은아빠되기 2015.02.03 210
54 apache 웹 서버에서 php 에서 해석(컴파일) 할 파일명 지정 및 추가 좋은아빠되기 2015.02.03 211
53 centos httpd mysql 자동 실행 좋은아빠되기 2015.01.31 223
52 my.cnf 설정 파일 위치 좋은아빠되기 2014.10.16 250
51 centos 6 minimla 설치후 기본 프로그램 설치 (setup 안될때) 좋은아빠되기 2017.05.06 264
50 mysql 기본 DB 엔진 변경 좋은아빠되기 2017.06.03 265
49 mysql 계정 생성 및 DB 생성 비밀번호 변경까지 좋은아빠되기 2017.05.27 297
48 문자열 추출 문제 file 좋은아빠되기 2014.12.08 308
47 Centos php.ini 위치 좋은아빠되기 2014.10.16 325
46 my-sql php 접속 코드 좋은아빠되기 2017.05.27 331
45 centos 6 minimal 설치 교육용 자료 좋은아빠되기 2017.08.19 337
44 서버용 리눅스 뭐 깔지? 좋은아빠되기 2014.10.16 366
43 아파치 http-mod-expires.conf 설정 좋은아빠되기 2014.10.16 384
42 linux 서버에서 간단한 메일 확인 방법 좋은아빠되기 2015.02.03 397
41 my-sql root 비밀번호 변경 좋은아빠되기 2017.05.27 408
40 아파치 httpd-mod-deflate 압축 설정 예시 좋은아빠되기 2014.10.16 418
Board Pagination Prev 1 2 3 Next
/ 3