컴퓨터/엑셀 2008. 12. 17. 13:01

[엑셀] 내가 찾는 자료는 어디에 있는 것이야? : Match / index

오늘 배울 함수는 match와 index입니다.

 

이것이 오늘 배우고자 하는 내용입니다. 지난 시간에 공부한 lookup 예제를 다시 풀어보는 것이죠. 이번에는 참조를 쉽게 하기 위해서 같은 시트에서 작업합니다. 그래야 직접 눈으로 보면서 이해하기 쉬우니깐요.

그리고 위의 그림은 결과 페이지입니다.

먼저 Match 함수가 무엇인지에 대해 알아보지요.

 

도움말에 설명이 잘 되어 있군요. lookup_value/lookup_array 등 많이 보던 녀석도 보이네요. match_type이란것도 보이구요.

익숙하지 않다면 지난 강의를 다시 한번 보세요.

lookup_value는 lookup()에서와 같습니다. 배열상에서 찾고자 하는 값이죠.

lookup_array는 검색할려는 대상입니다. lookup에서의 lookup_vector와 같습니다.

match_type은 조금 있다 설명하지요.

array라는 용어가 등장했는데 우리말로 번역하면 배열입니다. 그러나 여러분들은 그냥 단순히 "레인지" 하고 같다 라고 이해하시면 됩니다. (깊게 들어가면 차이가 있지만 굳이 그 차이까진 모르셔도 됩니다.)

즉 위의 예제에선 "홍길동,홍길순,투루노,라라루" 가 lookup_vector/lookup_array 가 되는 것입니다. 그리고 검색어 lookup_value가 있는지 있다면 몇번째 위치에 있는 지를 알려주는 것이 바로 match 펑션이 하는 일입니다.

match_type은 찾고자 하는 검색어를 좀 더 명확히 해주는 인자값입니다. 값은 -1 , 0, 1 이 될 수 있으며 디폴트 값은 1입니다. 자세한 건 직접 도움말을 참조하시고 여기서 쓸 옵션은 '0' 입니다.

0 은 해당 하는 자료중 중복되는 자료가 있어도 상관하지 않고 그 첫번째 자료를 리턴해줍니다.

만약 투루노 주식회사에 홍길순 이라는 같은 이름의 직원이 3명이 있다고 해도 그 중 첫번째 값만을 리턴해줍니다. 실제로 한번 볼까요?

 

홍길순 사원이 여러명입니다. 그러나 결과값은 2입니다.

B:B 라고 해서 나중에 사원이 많이 늘어라더라도 수식을 수정하지 않도록 했습니다.  그러다 보니 1행의 사원/이름/전화번호 까지 카운트가 되기때문에 결과값은 2 가 아니라 3이 되었습니다.

"이름/홍길동/홍길순/투루노/라라루....." 이렇게 배열이 되고 홍길순은 3번째 항목이 되는군요

만약 0이 아닌 값을 match_type으로 쓰기 위해선 정렬을 해주어야 합니다. 그리고 본인이 계속 진행하게 될 최종 목표에서도 정렬을 하는 것이 더욱 좋은 결과를 낼 수 있습니다.

정렬이 안되어 있을 경우에는 원하는 값이 정확히 나오지 않을 수 있으니 가능하면 정렬을 해주시기 바랍니다.

여기서 잠깐 DataBase에 대해서 맛만 보고 지나가도록 하겠습니다.  엑셀은 어떤면에서 데이타베이스를 많이 닮아 있습니다. 데이타베이스란 자료를 체계화하여 저장하는 것이라고 할까요? (물론 db를 정의하기 위해선 이 한문장으로는 매우 부족합니다. ^^*)  일반적으로 생각할때 위의 사원 자료도 훌륭한 데이타 베이스입니다. 쉽게 이해한다면 표는 데이타베이스다 라고 이해하셔도 될껍니다.

여기서 필드/레코드 하는 db용어가 등장하는 데 레코드는 사원 한명 한명을 의미합니다. 즉 한 행 한행의 데이타를 가르킨다고 할까요? 필드란 각 레코드의 구성요소로서 "사원번호, 이름, 전화번호" 등이 필드가 됩니다. 이와는 다른 말로도 불리기는 하는데 엑셀에서는 이렇게 쓰이고 있습니다. (향후 db로도 확장됩니다.)

그리고 키 필드리는 것이 있습니다. 각각의 레코드를 고유하게 하기 위한 값이 저장된 필드라고 할까요? 여기선 사원번호가 그에 해당합니다. 우리가 항상 쓰는 주민번호도 대한민국 국민 모두에 대해 유일하지요? 훌륭한 키 필드가 됩니다.

지금 굳이 db용어에 대해서 설명드린 이유는 위와 같은 자료를 만들때 이러한 키 필드가 있어야 관리하기가 편리합니다. 만약 위의 자료에서 match함수를 쓰기 위해 이름순으로 정렬하였다면 나중에 다시 원래 대로 어떻게 정렬 할 수 있을까요? (물론 이게 키 필드의 목적은 아닙니다.)

키 필드가 있으면 유용하겠지요? 키 필드는 꼭 필요한 것은 아닙니다. 그리고 여러개의 필드가 모여서 키를 구성할 수 도 있지요.

너무 깊게 들어가면 창 닫아 버릴지도 모르니 이쯤에서 접겠습니다. 그냥 이런게 있다 라고만 알고 넘어가면 될 듯 하네요. ^^*

 

이상으로 match가 무언지 알아봤습니다. 그럼 index를 알아볼까요?

 

아핫 내릴 시간이 되었습니다. ^^*

 

투루노는 퇴근하면서 버스안에서 이 글을 작성하다보니. ㅎㅎㅎ

지금은 컴퓨터를 꺼야 합니다. ^^*

그래서 index는 다음 시간에.. 절대 욹어먹기가 아닙니다. ^^* ㅎㅎㅎ

 

-마음가는 길은 곧은 길-

컴퓨터/엑셀 2008. 12. 11. 09:57

[엑셀] 문자열을 자유 자재로 : concatenate

concatenate는 문자열을 만들어주는 함수 입니다.

인자는 text로 변환 가능한 인자를 받습니다. text , 숫자 등이 되겠지요.

실제로 엑셀 도움말에 있는 예제를 보겠습니다.

 

 

도움말을 복사한것은 절대 예제를 만들기가 귀찮아서는 아닙니다. ㅎㅎㅎ

이해가 되시는 지요? 설명 란에 "송어의 개체 밀도는 32/킬로미터입니다." 가 결과값입니다.

아 숫자나 문자등을 가지고 하나의 문장을 만들어주는 구나...........

 

근데? 그게 뭐? -_-:;;;; 도데체 어디에 써 먹을 수 있을까요?

잠시 삼천포로 빠지면 제가 이 엑셀 강의를 시작하려고 마음 먹은 계기가 있습니다. 이거 하나만 잘 써도 엑셀로 정말 많은 일을 할 수 있겠다. 그리고 바로 이 정말 아무짝에도 쓸모없을 꺼 같은 concatenate함수가 바로 그 초석이 됩니다. ㅎㅎㅎ 자 이 얘기는 차근 차근 강의를 진행하다보면... 나오겠지요.

그럼 그때까진 이 concatenate를 써 먹지 못하냐? 여기 실제로 제가 쓰는 예제를 몇가지 보여줍니다.

전 강의에서 기념일을 계산하는 방법을 만들어서 보여드린 적이 있습니다.

너무 밋밋하다고 생각하지 않나요?

좀 장식을 더 해 보겠습니다.

 

오늘은 사귄지 608일 입니다. (예 저번 예제 작성일로부터 하루가 지났습니다.^^)

수식을 볼까요? concatenate(d1,a3,d2) 이렇게 되어 있네요. 각 셀에 문장을 미리 작성해 놓고 그것들을 이렇게 조합해서 사용합니다.

물론 이건 보여주기 위해서 이렇게 만든 것 이고 이렇게 써도 가능합니다.

=concatenate("오늘은 사귄지 ", A3, " 일 입니다.")

이렇게 수식을 쓰셔도 정확히 결과는 일치합니다.

조금 더 실용적인 예제를 들어볼까요?

제가 다니는 히사는 주간 업무 보고라는 것을 합니다. 자세한 내용은 필요없고 제목에 이렇게 적지요.

주간 업무 보고 (2007-12-01 ~ 2007-12-05)

주간 업무 보고는 매주 합니다. 매주 저 날자를 일일이 바꿔주긴 귀찮겠지요? 젤 편한 방법이 멀까요?

(날자를 안 쓰는 겁니다. -_-;;;;;)

ㅎㅎㅎㅎ

근데 날자를 안 쓰면 나중에 검색할때도 불편하고 팀장님이 화내요~~ ㅎㅎㅎ

그래서 전 이렇게 합니다.

=concatenate("주간 업무 보고 (", d6 " ~ " , 36, ")")

이해가 되시나요? 네 d6과 e6에 날자가 들어가는 거지요. 물론 그 날자는 자동으로 계산되어야 합니다.

지난 강의에서 날자 계산 하는 법, 오늘 날자 계산하는 법등을 배웠지요. 활용해보겠습니다.

.....

 

...

.

.

.

.

.

활용해 보시라구요!!! ㅎㅎ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ㅎㅎ

 

어렵지 않습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

힌트는 now() 입니다.

 

으학 이게 무슨 일 입니까? -_-???

저 알수 없는 숫자는 무엇일까요?

팀장님한테 더 혼나게 생겼네요. 어떻게 해야 할까요?

D6과 E6을 먼저 보겠습니다.

D6에는 NOW 함수를 써서 오늘 날자를 표시했습니다.

 

그럼 이번주의 월요일인 E6은 어떻게 계산했을까요?

어려운 방법이 있습니다. 날자 관련 함수들중에 주어진 날자의 주의 월요일을 계산해주는 함수도 있지요...

무슨 요일인지를 계산해주는 함수도 있습니다.

그런 저런 함수들을 써보고 싶지만 그렇게 하자면 너무 복잡해지고 어려워지니... 간단히 하겠습니다.

서두에 주간업무보고는 매주 금요일에 한다고 했습니다.

그럼?

 

그렇지요 월요일은 금요일보다 4일전입니다.

간단하지요? 그럼 이제 저기 나오는 시간이나 숫자가 문제네요 어떻게 해야 할까요?

 

도데체 어떻게 하면 이렇게 시간이 없고 날자값만 나오게 할 수 있을까요?

여기서 사용되는 함수는 TEXT라는 함수 입니다. 주어진 숫자를 일정한 양식에 맞춰 변환시켜주는 함수입니다.

text함수는 자세히 설명하기엔 좀 복잡하므로 궁금하신 분은 직접 도움말을 한번 보시기 바랍니다. 본 예제에서는 다음과 같이 활용하였습니다.

 

첫번째 인자를 두번째 인자(서식이라고 함)에 맞추어 변환시켜주는 것이죠. "yyyy-mm-dd"는 "년-월-일"의 형식으로 표현하라는 서식입니다.

간단한 함수인데 설명이 걸어졌네요.

이 concatenate함수가 응용될 다른 분야는 DM발송에서도 활용될 수 있습니다.

주어진 고객데이타가 있고 데이타에는 주소/이름등이 적혀 있으며 이 데이타를 기초로 발송지 주소를 뽑고 싶을때 응용할 수 도 있겠지요.

이에 관해서는 다음에 기회가 되면 다시 써 보겠습니다.

-마음가는 길은 곧은 길-

PS : 명일부터 휴가인 관계로 다음강좌는 수요일에나 올라올듯 합니다. 못간 여름 휴가입니다. ㅎㅎㅎ