조회 수 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 apache 동시 접속자수 확인 좋은아빠되기 2015.02.03 483
57 apache 디렉토리 인덱스(인덱싱) 방지 좋은아빠되기 2015.02.03 478
56 apache 압축 deflate 테스트 사이트 좋은아빠되기 2015.02.03 210
55 apache 웹 서버에서 php 에서 해석(컴파일) 할 파일명 지정 및 추가 좋은아빠되기 2015.02.03 211
54 apache 웹서버 접속시 기본적으로 보여지는 파일 우선순위 설정 좋은아빠되기 2015.02.03 1034
53 apache 이전버전 다운로드 주소 좋은아빠되기 2015.02.04 1115
52 apache2 worker 설정값들 좋은아빠되기 2015.01.09 544
51 APMSETUP 7 다운로드 file 좋은아빠되기 2017.07.03 15882
50 centos 6 minimal 설치 교육용 자료 좋은아빠되기 2017.08.19 337
49 centos 6 minimla 설치후 기본 프로그램 설치 (setup 안될때) 좋은아빠되기 2017.05.06 264
48 centos 6 저장소 추가 좋은아빠되기 2017.06.03 205
47 centos 6.6 apache 2.2.X 설치(httpd) 컴파일 설치 하기 좋은아빠되기 2015.02.09 4599
46 CentOS 6.6 APM yum 설치 방법 좋은아빠되기 2015.02.11 1541
45 centos 6.6 APM 컴파일 설치 준비 작업 좋은아빠되기 2015.02.04 1574
44 centos 6.6 mysql 5.1.X 컴파일 설치 하기 좋은아빠되기 2015.02.04 2925
43 centos 6.6 php 5.3.X 5.6.X 컴파일 설치 하기 좋은아빠되기 2015.02.10 2749
42 centos 6.6 네트워크 설정파일 위치(부팅시 네트워크 자동 연결) 좋은아빠되기 2015.02.03 795
41 centos 7 minimal 설치 교육용 자료 좋은아빠되기 2018.11.17 629
40 Centos FTP 설치 및 root 접속 설정(vsftpd) 좋은아빠되기 2015.01.29 1749
Board Pagination Prev 1 2 3 Next
/ 3