나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 조삿갓 (choga21)

추천:  2
파일:     개선_test (1)-170926-1-1.xlsm (27.5KB) 조회:  2338
제목:   [개선] 동적 유효성검사 목록 및 Worksheet_Change 이벤트 활용
     
  답변 후 가만히 살펴보니
[코드] 시트의 입력 설계 역시 상당히 비효율적인 부분이 있네요.

실제 상황에서는 병원명이 한 글자로만 되지는 않을텐데
어차피 병원명 목록을 만들어 활용한다면
의사 목록을 구성할 때에도 병원명은 미리 작성해 둔 목록에서
선택하여 입력하도록 하는 것이 더 효율적이지 않겠어요?

그래서 [코드] 시트의 설계를 처음부터 대폭 수정하였습니다.

먼저, 병원명 목록과 코드를 따로 작성합니다.(A:B열)

그리고, D:G열에 병원별 의사 목록을 작성할 때에는
병원명은 미리 작성해 둔 목록에서 선택하도록 하고(데이터 유효성 검사 적용)
병원코드는 병원명 목록에서 VLOOKUP으로 자동 참조하도록 하였습니다.

손 댄 김에
이 시트에도 Change 이벤트 핸들러를 코딩하여
병원명 목록이나 의사 목록이 반드시 연속된 데이터로 입력되도록
그리고 의사 목록은 병원별로 그룹화되도록
VB 코드에 의해 입력 즉시 자동 조정됩니다.

즉, A7:A8 셀을 비워둔 채로 A9 셀에 새로운 병원명을 입력할 경우
자동으로 입력한 내용이 A7셀에 올라가 붙고 
병원코드를 입력하도록 B7셀로 포인터가 자동 이동합니다.

D열에서도 마찬가지 동작이 일어나고
뿐만 아니라 D12 셀에 병원명으로 '나'를 입력할 경우
7행에 레코드 삽입이 일어나서 D7 셀로 이동되고
나 병원에 새로운 의사를 입력할 수 있도록
F7 셀에 셀포인터가 이동합니다.

병원명을 입력하지 않고
F열에 의사명을 먼저 입력할 경우에는
바로 윗줄의 의사와 동일한 병원 소속으로 간주하고
D,E열이 자동 입력됩니다.
물론 셀포인터는 의사코드를 입력할 위치로 갑니다.

코드 안에 주석을 달아 두었으니
잘 분석하고 공부해 보시기 바랍니다.

 
[불량 게시물 신고]  
        
  

작성일 : 2017-09-27(20:50)
최종수정일 : 2017-09-27(20:50)
 


 ◎ 관련글

  제 목   작성자   날짜
vba의 함수 실행 질문을 드립니다. 김원호 2017-09-26
[개선] 동적 유효성검사 목록 및 Worksheet_Change 이벤트 활용 조삿갓 2017-09-27
[RE]vba의 함수 실행 질문을 드립니다. 조삿갓 2017-09-26