데이터 유효성 검사를 할 때, 상황에 따라서 목록 구성이 다르게 표시되는 방법을 알아보겠습니다. 일단 다음의 경우를 예로 들면,
학교급(초등, 중등, 고등 등)을 선택하였을 때, 초등을 선택하면 학년을 선택하는 셀에서 16학년까지 6개의 목록을 선택할 수 있도록 표시되고, 중등을 선택하면 79학년, 고등을 선택하면 10~12학년을 선택할 수 있는 목록이 표시되도록 하는 것을 의미합니다. 또 학년마다 학급수가 다르기 때문에 각 학년을 선택하였을 때, 그 학년의 학급수만큼 학급 목록이 뜨도록 하면 더 좋겠죠. 이렇게 상황에 따라 목록이 유동적으로 표시되도록 하면, 데이터를 취합하는 입장에서 오류를 줄일 수 있는 상황을 기대할 수 있습니다.
목록 구성 설정
먼저 설정 시트를 만들고 조건으로 사용할 목록을 구성해보겠습니다. 여기서는 두가지가 필요한데
학교급에 따른 학년범위 설정 : 초등은 16학년, 중등은 79학년, 고등은 10~12학년, 국제와 유치는 학년개념이 없으므로 그대로 국제와 유치로 설정
학년에 따른 학급범위 설정 : 국제는 국제반, 유치는 토끼/사슴/기린반으로 나뉘고 그밖의 1~12학년까지 각 학년별 학급수를 나타냅니다.
이름 만들기
예를 들어서 설명하는 것이 가장 좋을 것 같네요. 수식> 이름 관리자를 클릭한 후 새로 만들기를 클릭
이름 : 학교급_초등
참조 대상 : 설정!$C$3:$C$8
즉, C2셀을 이름으로 하고, 학년의 범위를 나타내는 C3~C8셀까지를 참조 대상으로 하는 이름을 만드는 것이죠.
반복하여 이름 만들기
이제 같은 방법으로, A2, B2, D2, E2, A11~N11 셀을 이름으로 반복하여 새 이름을 만듭니다.
※ 이름 만들기 할 때 고려할 점
예를 들어 6학년의 경우 1~4반까지 있지만, 차기 학년도에 학급수가 6개반으로 증가하게 되면 참조 대상을 다시 수정해주어야 하는 불편한 점이 생길 수 있습니다. 그러므로 학급수 같이 유동적인 데이터는 참조 대상을 여유있게 지정해두는 것이 좋습니다.
이름 : 학년6_반
참조 대상 : 설정!$H$12:$H$22 (설정!$H$12:$H$15 로 지정하지말고 여유있게 지정하는 것을 추천)
적용
실제 적용될 부분을 만듭니다. 여기서는 J4~L6 부분이 되겠네요.
데이터 유효성 검사
학교급
J4셀 : 학교급이라는 제목을 쓰고
J5셀 : 데이터> 데이터 유효성 검사를 클릭한 뒤
제한 대상 : 목록
원본 : 국제,유치,초등,중등,고등
J6셀 : =”학교급_”&$J$5 (J5셀이 초등으로 선택이 되면, 학교급_초등 으로 바꿔주는 수식입니다.)
학년
K4셀 : 학년이라는 제목을 쓰고
K5셀 : 데이터> 데이터 유효성 검사를 클릭한 뒤
제한 대상 : 목록
원본 : =INDIRECT($J$6) - J5셀이 초등으로 선택되면 J6셀이 학교급_초등으로 바뀌는데, J6셀을 목록 원본으로 지정하므로 이름 지정시 학교급_초등의 참조범위인 C3~C8 부분을 목록으로 불러옵니다.
그러므로, 아래와 같은 형태로 목록이 뜨게 됩니다.
K6셀 : =”학교급_”&$K$5 (K5셀이 6으로 선택이 되면, 학년6_반 으로 바꿔주는 수식입니다.)
반
L4셀 : 반이라는 제목을 쓰고
L5셀 : 데이터> 데이터 유효성 검사를 클릭한 뒤
제한 대상 : 목록
원본 : =INDIRECT($K$6)
K5셀이 6으로 선택되면 K6셀이 학년6_반으로 바뀌는데, K6셀을 목록 원본으로 지정하므로 이름 지정시 학년_반의 참조범위인 H12~H22 부분을 목록으로 불러옵니다.
그러므로, 아래와 같은 형태로 목록이 뜨게 됩니다.
(선택사항) L6셀 : =K6&L5 (K6셀이 6, L5셀이 1로 선택이 되면, 학년6_반1 과 같이 바꿔주는 수식입니다.)
엑셀의 vlookup 함수는 사진파일을 데이터형으로 다룰 수 없어요. 여기서는 사전에 준비된 사진파일(.jpg, .gif, .png, .bmp 등)을 보다 쉽게 엑셀파일에 삽입하고, 삽입된 사진을 몇가지 함수를 조합하여 vlookup 효과를 구현하는 방법을 알아보도록 하겠습니다.
예시
담임 선생님이라면 매 학년초마다 연락처 등을 포함한 학생인적사항 관련 조사를 하게 됩니다. 일반적인 경우라면 관련 부서에서 한글워드프로세서나 엑셀, 한셀 등으로 양식을 만들어서 보내주고 그것을 이용하여 작업을 하는데, 사실 여러 부서에서 중복된 데이터를 다양한 형태의 폼으로 원하기 때문에 그때마다 재입력해야하는 엄청난 비효율을 매년마다 경험하게 되요. 그렇기 때문에 조금 어렵고 귀찮기는 하지만 한글워드프로세서보다는 엑셀, 한셀 등의 스프레드시트를 통해 관리하는 것을 강력히 추천합니다. 엑셀로 RAW데이터를 만들어두면, 이 데이터를 활용하여 한글워드프로세서의 메일머지를 이용하기도 쉽고 엑셀이나 한셀을 사용하여 통계를 내기도 쉬워지기 때문이죠.
이렇게 RAW데이터를 엑셀로 만들어두었다고 치고, 이를 활용하여 학적부를 만들어보겠습니다. 특정 데이터의 형태가 학생에 따라 반복되어 출력되는 형태이기때문에, 메인이 되는 한 페이지를 만들고, 원하는 학생을 선택하여 vlookup 함수를 써서 RAW데이터시트의 데이터를 메인페이지로 불러와 학생에 따른 데이터를 띄우는 방법이 가장 좋겠지만…
여기서는 학급 시트를 만들고, 해당 학급의 모든 학생의 학적부가 동일 시트에 연속적으로 이어져 나오는 형태를 만들어 보려고 합니다. 좋은 방법이 아닌것 같은데 왜 이렇게 하냐고요? 왜냐하면 현장에서는 실제로 이런 방법을 더 좋아하는 분들이 많기 때문이죠. 20~30여명 정도만 관리하면 되는 담임선생님 입장에서는 보다 직관적이고 명확하기 때문입니다. (※조금 어렵네? 혹은 복잡하네? 왜 이런것을 하지? 라고 느끼는 사람이 한 명이라도 있다면, 현장에서 적용하기는 어렵다는 점을 고려하세요. 쉽게 이용할 수 있도록 어느 정도의 배려를 해주어야 모두 함께 이용할 수 있습니다.)
어쨋든, 이 과정에서 가장 어려운 부분이 사진을 넣는 것입니다. 다른 데이터는 RAW데이터가 있는 시트에서 vlookup 함수를 사용하여 불러오면 되지만 서두에서 이야기한대로 사진의 경우는 vlookup으로 호출할 수 없기 때문입니다. 예를 들어 아래와 같이 학적부 형태를 만들고 ①, ②이라고 쓰여있는 곳에 1번 학생과 2번학생의 사진을 자동으로 불러오도록 하는 것이 vlookup으로 불가능하다는 것이죠. 여기에는 ②까지 표시되어 있지만 실제 한 학급에 20여명의 학생이 있으므로 하나의 시트에 20여개의 사진이 번호에 맞는 위치에 정확하게 배치를 해야하는데, vlookup이 안된다니 왜 엑셀을 이따구로 만들었는지 모르겠네요. ^^;
그렇다고 사진을 하나씩 수동으로 넣는 것도 쉬운 일은 아닙니다. 물론 20여명의 학생만 있다면 약간의 시간과 노동력 투자를 통해 가능은 하겠지요. 하지만 한번 해보시면 바로 느끼게 될 것입니다. 해당 셀의 사이즈에 맞도록 사진 크기를 수동으로 조절해가면서 사진을 하나씩 하나씩 넣는 것이 엄청 귀찮은 일이라는 것을…
그러므로 여기서는 사진입력을 손쉽게 하는 방법을 포함하여 사진으로 vlookup과 같은 기능을 구현하는 방법을 알아보겠습니다.
(‘’사진(1학년)’’ 시트를 만들어) VBA코드 삽입하기
1) ‘’개발 도구’’ 메뉴 활성화
VBA코드를 넣기 위해서는 개발 도구라는 메뉴 내의 Visual Basic를 활성화시켜야 하는데요.
위 그림과 같이 개발 도구 메뉴가 보이지 않는 경우라면 아래의 방법대로 메뉴를 활성화 시켜주어야 합니다.
파일> 옵션> 리본 사용자 지정
오른쪽에 있는 리본 메뉴 사용자 지정의 개발도구에 체크 합니다.
2) 사진을 모아두기 위한 시트 생성
학생 사진이 들어갈 시트를 만듭니다. 예를들어 **사진(1학년)**이라는 시트를 만듭니다. 예시로 만든 시트의 형태는 다음과 같습니다. 이때 사진이 들어갈 셀의 크기를 실제 사진이 사용될 크기대로 조절합니다. (행과 열 블럭을 잡아 각각 한번에 조절해야 모든 셀의 크기가 같아집니다.)
그리고 사진이 들어갈 부분만 셀 색상을 지정합니다. (아무 색상이나 가능. 단, 흰색은 색깔이 없는 셀과 구별이 되지 않으므로 추천하지 않아요.)
3) VBA코드 붙여넣기
이제 ‘’개발 도구’’의 ‘’Visual Basic’’ 메뉴를 열고 **사진(1학년)**시트에 해당하는 부분(아래 예시 그림에서 Sheet3 부분)을 더블클릭한 뒤 아래의 VBA코드를 붙여넣고 저장합니다.
알면 좋겠지만, 코드의 의미를 전혀 모른다고 해도 상관없습니다. 그냥 복사하여 붙여넣기만 하면 돼요.
With fd .Filters.Clear .Filters.Add ""Images"", extImages, 1 .AllowMultiSelect = False .Show strResult = .SelectedItems(1) End With
ActiveSheet.Shapes.AddPicture(strResult, False, True, 0, 0, 0, 0).Select With Selection .ShapeRange.LockAspectRatio = msoFalse .Top = Target.Top .Left = Target.Left .Width = Target.Width .Height = Target.Height .Placement = xlMoveAndSize End With End If n: End Sub
(‘’사진(1학년)’’ 시트에) 사진 파일 등록
사진 파일 만들기
사진 파일은 *.gif; *.jpg; *.jpeg; *.bmp, *.png 형식으로 등록할 수 있습니다. 사진을 넣을 셀의 크기를 고려하여 적당한 비율의 사진파일을 미리 만들어 둡니다.
사진 파일 등록
사진이 준비가 되었으면 셀색상을 입힌 부분을 마우스로 클릭하면 사진 파일을 선택하는 창이 나오는데, 이때 해당 학생의 사진을 선택하면 사진이 등록됩니다. 이때 사진의 크기는 자동으로 조절되어 셀의 크기에 딱 맞게 등록이 되고, 실제 사용할 학적부 페이지에도 이 부분에서 지정한 셀의 크기대로 삽입이 되기때문에, 셀의 크기를 조절하여 만들 때 가능한 최선을 다해(?) 잘 만들어두는 것이 중요해요.
(선택사항) dummy 사진 파일 등록
(꼭 해야하는 것은 아니지만 경험상…) 사진이 없는 학생을 위해 사용할 더미 사진을 추가로 등록해두는 것이 좋습니다. 사진 등록하는 곳 맨끝번호에(예를들어 반 학생이 19명이라면 20번에) 아무 사진이나 똑같은 크기로 준비하여 등록을 해주세요. 예를 들면 이런거죠.
(‘’사진(1학년)’’ 시트에서) 이름 정의하기
사진을 등록했던 시트를 다시 봅니다. 사실 이 시트에는 A열이 숨겨져 있었습니다. B~E열까지의 내용을 모두 합쳐서 만든 학적번호라는 제목을 가진 열입니다. 이것이 왜 필요하냐하면…vlookup과 같은 효과로 사진을 찾기 위해서는 특정 자료를 매칭시켜야 하기 떄문이죠. 여기서는 학적번호 열을 통해 매칭을 시키는 것으로 가정합니다.
‘’학적번호 열’’에 대한 이름 지정
이제 수식> 이름 정의를 클릭합니다. 아래와 같이 새 이름을 등록할 수 있는 창이 뜨면
이름과 참조 대상을 위와 같이 지정합니다.
이름 : 학적번호1학년1반
참조대상 : =’사진(1학년)’!$A$2:$A$21
A2에서 A21셀까지 참조 대상이 지정되어 있으므로 더미 포함 총 20개의 사진이 등록되어 있다는 뜻이겠네요. 만약에 인원이 더 많다면 그에 맞게 숫자를 조절하면 됩니다.
※ 학기중 전입생이 올 수 있기 때문에 조금 여유있게 지정을 해두는 것이 좋습니다. 즉, 현재 학급의 학생이 19번까지 있다고해서 더미를 포함하여 딱 20개의 사진만 등록할 수 있게 만들면 나중에 힘들어 질수도 있어요. 여유있게 30~40개의 사진을 등록할 수 있게 참조대상을 지정하세요. 예를들어 참조대상을 =’사진(1학년)’!$A$2:$A$41 이렇게 지정해 두는 것을 추천합니다.
‘’사진 열’’에 대한 이름 지정
이번에는 사진 열에 대한 이름을 지정하기 위해 다시 수식> 이름 정의를 클릭합니다. 이전과 같이 새 이름을 등록할 수 있는 창이 뜨면,
이름 : 사진1학년1반
참조대상 : =’사진(1학년)’!$G$2:$G$21 (이것도 마찬가지로 여유있게 지정해 두는 것을 추천합니다.)
(선택사항) (‘’학적부(1학년) 시트에서’’) 매칭 조건으로 사용될 셀의 데이터 유효성 검사
데이터 유효성 검사
매칭 **조건으로 사용될 셀(혹은 셀 전체)**에 대하여 데이터 유효성 검사를 합니다. 그런데 위에서 매칭시킬 조건으로 학적번호를 사용하기로 하고 이름을 지정하였으니 이것을 이용하는 것입니다. 먼저 실제 사진이 위치할 시트인 학적부(1학년) 시트를 보면,
**조건으로 사용될 셀(혹은 셀 전체)**이 A2, A32, A62 …. 이고 20명의 학생을 등록한다면 A572 까지 입니다. 이 셀들을 블록설정한 뒤에 데이터> 데이터 유효성 검사 메뉴를 이용하여 검사조건을 설정하는 것입니다.
(※ A2, A32 등의 셀에는 학적번호 내용을 써야 합니다. 예를들어 A2셀은 초등 1학년 1반의 1번 학생에 대한 학적번호가 들어가야 하므로, 초등1학년1반1이라는 내용이 들어가야 하는 것이지요)
제한 대상 : 목록
원본 : 학적번호1학년1반 (‘학적번호 열’에 대한 이름 지정 과정에서 만들었던 이름을 사용)
(‘’사진(1학년)’’ 시트에서) 개별 학생 사진에 대한 이름 정의하기
※ 이 과정은 반드시 사진(1학년) 시트에서 진행해야 하는 것은 아니며, 사진이 입력되지 않은 상태에서 진행해도 됩니다.
개별 학생 사진에 대한 이름 정의하기
이제 학생 개인별 사진 하나하나에 대한 이름을 정의하겠습니다. 수식> 이름 관리자 메뉴를 클릭하면 이름 관리자 창이 나타나는데 여기서 새로 만들기를 선택합니다.