'엑셀': 검색된 포스트 '11'건
- 2009/08/24 엑셀을 쓰려면 IQ 150 이상일 것 (9)
- 2009/05/17 Office 14 (3)
- 2008/08/27 Big Grid
- 2008/08/21 엑셀 계산 속도 (2)
- 2007/06/04 사용자 정의 함수.
‘난 지금 매우 화가 나 있어.’
방금 저는 엑셀 2007에서 파일 하나를 공유 모드로 만들려고 했습니다. 파일을 공유 모드로 만들어 네트워크 드라이브에 던져 두면 아무나 동시에 열어서 마구 편집할 수 있고 편집한 내용을 추적할 수도 있어서 아주 편리합니다. 회사에서는 늘 이 기능을 사용했는데, 집에서 이 기능을 사용하려고 한 것은 이번이 처음입니다. 엑셀 파일을 새로 만들고 파일을 공유 모드로 설정한 순간 이런 대화상자가 나타났습니다.
뭐라고 써있는지 잘 안 보이지만 억지로 읽어보자면 이렇습니다.
‘이 통합 문서에 대해 개인 정보를 설정했으므로 이 통합 문서를 공유할 수 없습니다. 이 통합 문서를 공유하려면 Microsoft Office 단추를 클릭한 다음 [Excel 옵션]을 클릭하십시오. [Excel 옵션] 대화 상자에서 [보안 센터]를 클릭한 다음 [보안 센터 설정] 단추를 클릭하십시오. [개인 정보 옵션] 범주에서 [저장 시 파일 속성의 개인 정보 제거] 옵션 옆에 있는 확인란 선택을 취소하십시오.’
여기까지 읽은 다음 정말로 이렇게 말했습니다. ‘뭐라고 이 미친 새끼야?’
일단 처음 읽고선 저게 대체 무슨 소린지 이해할 수가 없었습니다. 일단 공유모드로 설정이 안 되었다는 것은 알겠는데, ‘통합 문서에 대해 개인 정보를 설정'했다’는 말이 무슨 소린지 몰랐습니다. 방금 새 파일을 열고 바로 저장한 거라 저는 아무 것도 한 적이 없었습니다. 여튼 저는 빨리 공유모드로 파일을 설정하고 자러 가고 싶어졌으므로 다음 지시사항을 읽어봤습니다. ‘음. 일단 오피스 버튼을 누르고 엑셀 속성을 클릭하라는 거군.’ 여기까지 읽은 다음 그대로 수행하고 보니 아까 대화상자에 뭐라고 써있었는지 기억이 안 납니다.
그래서 다시 창을 닫고 다시 저 대화상자로 돌아가서 처음부터 또 읽었습니다. ‘음. 일단 오피스 버튼을 누르고 엑셀 속성을 클릭한 다음 … 보안 센터를 클릭한 다음 … 보안 센터 설정 단추 … 개인 정보 옵션 범주 …아 씨발! 내가 천재냐? 이걸 어떻게 기억해!’ 라고 소리친 다음 창을 복사해 메모장에 붙여 넣고 엔터를 눌러 아래처럼 정리했습니다.
‘이 통합 문서에 대해 개인 정보를 설정했으므로 이 통합 문서를 공유할 수 없습니다.
이 통합 문서를 공유하려면 Microsoft Office 단추를 클릭한 다음
[Excel 옵션]을 클릭하십시오.
[Excel 옵션] 대화 상자에서 [보안 센터]를 클릭한 다음
[보안 센터 설정] 단추를 클릭하십시오.
[개인 정보 옵션] 범주에서
[저장 시 파일 속성의 개인 정보 제거] 옵션 옆에 있는 확인란 선택을 취소하십시오.’
그리고 나서 메모장을 화면 적당한 곳으로 치운 다음 힐끔힐끔 메시지를 쳐다보면서 간신히 체크를 끄라는 체크박스를 찾아 체크를 끄는데 성공했습니다. 그리고 생각했습니다. ‘이 개새끼들-_-‘ 애초에 이런 조작을 대화상자 하나로 덜렁 알려준다는 것 자체가 말이 안 되는 상황인데다가 그 조작이 위처럼 여섯 단계를 거쳐야 해서 한 번에 보고 기억할 수도 없습니다.
자. 일단 대화상자 구성을 위처럼 단계 별로 표시해 주는 방법을 생각할 수 있을 겁니다. 하지만 대화상자는 닫기 전에는 다른 조작을 할 수 없다는 점을 생각해 보면 위 조작은 절대 대화상자로 나타내서는 안됩니다. 그 잘 만든 엑셀 도움말로 나타냈다면 한 단계, 한 단계씩 따라갈 수 있었겠지요.
유저는 메뉴나 체크박스가 실제로 어느 메뉴의 하위에 달려 있는지는 별 관심이 없습니다. 단지 그 체크박스까지 최대한 빨리 도착하기만 하면 됩니다. 조금만이라도 더 생각했다면 제가 바꿔야 했던 체크박스를 대화상자 안에 넣고 나중에 어디서 바꿀 수 있는지를 알려주든지, 그 잘 만든 하이퍼링크 하나 걸어서 누르면 바로 체크박스가 달린 대화상자를 열 수 있도록 하는 것이 옳았을 겁니다.
결국 엑셀 파일을 공유 모드로 설정해 사용하는 것에는 성공했지만 과정이 아주 아주 불쾌했습니다.
윈도우 XP의 리비전 주기가 생각보다 길어졌고 윈도우 7이 윈도우 비스타를 대신해 아주 짧은 리비전 주기 만에 출시가 예정되어 있는 상황에서 상대적으로 조용히 오피스 리비전 주기가 돌아오고 있습니다. 오피스 2003,에서 2007을 거치면서 리본 인터페이스를 도입하며 진통을 겪은 오피스 시리즈이고, 요새는 듣보잡 오픈오피스나 웹오피스에 주도권을 내줄 지경에 처했지만 여전히 오피스 소프트웨어의 발전 방향을 선도하고 있고, 여전히 도저히 대체할 프로그램을 찾을 수 없기도 합니다.
이런 와중에 드디어 오피스 14의 스크린샷을 구경했습니다. 가장 큰 특징은 드디어 아웃룩에도 리본 인터페이스가 도입된다는 점입니다. 리본 인터페이스는 말도 많고 탈도 많았지만 제 경험으로는 결과적으로 작업 능률을 더 올려줍니다. 원하는 메뉴가 언제나 그 자리에 고정돼 있는 풀다운 메뉴에 익숙한 사람들에게 적응하기 골때리는 방식이지만, 상황에 따라 필요한 메뉴가 자동으로 그룹핑되고, 메뉴가 논리적인 기능의 배치보다는 작업하는 상황에 맞게 배치되어 결과적으로 같은 메뉴를 찾는 속도가 더 빨라집니다. 오피스 2007에서도 아웃룩이나 비지오, 원노트 등은 여전히 풀다운 메뉴를 사용했는데, 슬슬 바꿀 모양입니다.
워드나 엑셀은 더 이전에도 스크린샷이 공개된 적이 있습니다. MS오피스가 발전해 오면서 몇몇 작업에 대한 개념이 크게 바뀌고 있는데, 주목해야 하는 부분은 워드의 포지션입니다. 워드는 '’워드프로세서’의 줄임말이고 굳이 한글로 말하자면 ‘문서편집기’ 정도가 됩니다. 문서를 만드는 도구입니다. 처음에는 문서를 만드는 도구였다가, 위지윅 기능이 들어가면서 문서의 외형을 꾸미는 도구가 되었고, 그 다음에는 문서의 구조를 입력할 수 있게 됐습니다. 이미 워드 2000 정도에 접어들면서 문서의 겉모양을 만드는데 필요한 웬만한 기능은 다 들어갔습니다.
그 다음에는 단일 사용자를 위한 버전 관리 기능과 여러 사람이 문서를 편집하는 상황을 대비한 비교, 병합 기능, 그리고 문서가 온라인에 공유되는 상황을 고려한 셰어포인트 대응 기능이 추가됐습니다. 이쯤 되면 느낌이 오지만 워드는 더 이상 이전의 ‘문서 편집기’라고 보기 어려울 지경이 됐습니다.
그러는 사이에 사람들의 새로운 니즈가 생겼는데, 문서 공유를 필요로 하지만 워드만큼 복잡한 문서를 꾸미는 기능은 필요로 하지 않는 상황을 커버할만한 도구입니다. MS오피스에서는 이런 부분을 커버할 도구로 원노트가 있고 원노트는 워드만큼 정교하지는 않지만 웬만한 수준의 문서를 아주 아주 쉽게 다른 사람들과 공유하고 편집할 수 있습니다. 그래서 이번 오피스 14에서 가장 주목하는 부분이 워드의 포지션이며, 워드와 원노트가 서로 어떤 방향으로 갈 지가 중요합니다. 현재대로라면 워드는 그럭저럭 쓸만한 다중 작업 기능을 갖춘 DTP 소프트웨어에 가까워질 것이고 원노트는 그럭저럭 쓸만한 편집 기능을 갖춘 문서 공유 플랫폼에 가까워질 겁니다.
오피스 2007에서 변화의 핵심이 엑셀이었다면 이번 버전의 핵심은 워드와 원노트라고 생각합니다. 이번 버전에서 워드와 원노트가 오피스에서 차지하는 포지션은 또다시 앞으로 몇 년 동안 사람들의 문서 작업 스타일을 바꾸게 될 겁니다.
엑셀 2007은 이전 버전에 비해 인터페이스 말고도 여러 부분의 개선이 이루어졌습니다. 사실, 기능만으로 따진다면 이전 버전과 크게 달라진 것이 별로 없다고 볼 수도 있습니다. 하지만 내부적으로 여러 가지 제약사항들이 완화되어 이전 버전의 제한 영역에서 생기던 오동작이 많이 줄어들었습니다.
하지만 엑셀의 제한이 완화되었다고 해서 데이터 크기가 커지는 속도가 완화된 것은 아닙니다. 물론, 엑셀 2007의 모든 셀을 가득 채울만한 거대한 데이터는 엑셀 대신 다른 처리 방법을 고안하는 것이 맞지만, 엑셀만큼 편리한 데이터 처리 도구가 많지 않습니다.
엑셀 2007은 분명 (2^14) * (2^20) 크기의 커다란 스프레드시트 전체에 데이터를 넣어도 제대로 동작해야 합니다. 물론, 모든 셀에 데이터를 넣는다고 해서 즉시 제한 영역에서 일어나는 오동작이 일어나지는 않지만, 다른 세부 제한 때문에 엑셀 2007에서 기존 엑셀 2003에서 사용하는 것보다 아주 큰 데이터를 처리하는데 엑셀을 완전히 신뢰할 수 없습니다.
대부분의 문제는 이전 버전에서 개수로 제한을 두던 사항들이 엑셀 2007에서 개수 제한 대신 메모리 한계만큼 가능하도록 제한을 푼 것에서 일어납니다. 엑셀은 계산 속도 단축을 위해 무조건 잔체 셀을 계산하지 않습니다. 그래서 워크시트에 아주 많은 계산들이 엉켜있어도 쉽사리 느려지지 않는데요, 약 8000개 정도의 다른 셀을 참조하는 계산을 계산하지 않은 상태로 유지할 수 있습니다. 처리하지 않은 계산이 제한을 넘으면 그때서야 엑셀이 잠깐 얼어붙어 전체 계산을 수행합니다.
그런데, 엑셀 2007에서는 이런 제한들이 '메모리가 허락하는 만큼'으로 변경되었습니다. 메모리를 많이 꽂으면 꽂을수록 계산을 나눠서 할 수 있으니 더 빠르다고 생각할 수 있지만, 오히려 처리되지 않은 계산이 늘어나면 셀을 참조하는 과정에서 오동작이 생깁니다. 수식이 들어있는 셀을 새로 고치면 이 셀에 종속된 모든 셀의 계산을 처리해야 하고, 종속된 셀을 처리하는 과정에서 이 셀을 복사해서 만든 다른 셀의 계산도 수행하는 것이 정상이지만, 오동작이 많이 발생합니다. 그래서 가끔씩 워크시트 전체를 수동으로 리빌드 해야 합니다. 처리량이 많다면 엑셀이 한참 얼겠죠.
또, 이전 버전에서 2048개로 제한되어 있던 한번에 복사하거나 붙여넣을 수 있는 필터링 된 셀의 영역 수도 엑셀 2007에서는 '메모리 한계만큼'으로 변경되었는데, 덕분에 이번에도 아주 많은 셀을 옮길 때 문제를 일으킵니다. 필터링 된 상태를 복사했지만 실제로는 필터링 되어 있지 않거나, 필터링 된 데이터의 일부만 복사되거나, 리소스가 부족하다는 에러를 내고 작업이 수행되지 않기도 합니다. 이 상황들이 무작위로 일어나지요.
The Big Grid - 엑셀 2007 - 가 많은 데이터를 처리할 때 일어나는 여러 가지 문제점들이 엑셀 자체의 문제일지, 아니면 엑셀 2007의 워크시트 전체를 사용하려면 이제 32비트 윈도우에서 처리할 수 있는 메모리보다 더 많은 메모리가 필요한 것일지는 잘 모르겠습니다. 하지만, 적어도 32비트 환경과 2기가 정도의 메모리에서는 엑셀 2007이 제시하는 처리 가능한 데이터의 양을 신뢰할 수 없고, 데이터의 처리 결과나 작업 과정도 신뢰할 수 없는 상황이 많았습니다.
엑셀 2007은 분명 엑셀 2003보다 더 많은 데이터를 처리할 수 있도록 만들어졌지만, 아직 아주 큰 데이터를 원활하게 처리할만큼 엑셀 자체가 안정적이지 않고, 그 정도의 데이터를 처리하기 위해서는 32비트 윈도우의 한계에 도달하지 않았나 싶습니다.
2003, 2007, the Big Grid, 엑셀
엑셀 2007을 처음 구경한 것이 언제인가 하고 찾아보니 어느새 2년 하고도 석달 전입니다. 인터페이스를 포함해서 여러 가지 사항들이 변경되는 것을 파악했지만, 실제로 2년이 지나도록 주력으로 사용할 일이 없었습니다. 새로운 인터페이스에 적응하기 귀찮아서가 가장 큰 이유였고, 어째서인지 엑셀 2007을 사용하려고 할 때마다 체감 속도가 엑셀 2003에 비해 상당히 느리다고 생각되었기 때문에, 올해까지도 굳이 사용하려고 노력하지 않았습니다. 더 이상 엑셀 2003으로 처리할 수 없는 커다란 데이터를 만나기 전까지는요.
하지만 기어이 만나고야 말았습니다. 최대 열 수가 65,536개인 엑셀 2003에서 여러 워크시트로 데이터를 나눠 어떻게든 처리해 보려는 시도를 하기 부끄러울 정도로 기나긴 열을 자랑하는 이 데이터는 인터페이스에 적응하는 것이 귀찮아 주섬주섬 피하던 엑셀 2007을 어떻게든 써먹지 않으면 안 되겠다는 결정을 내리도록 만들었습니다.
이 데이터는 뭘 하든 골칫거리였는데, 여닫는데만도 한참씩 걸렸고, 열 단위로 뭘 하려고 마음먹으면 그게 뭐든지 간에 한 80만 번씩 반복해야 하는 것이 가장 큰 문제였습니다. 특히 이 데이터는 하나의 열이 한 가지 값을 의미하는 형식으로 만들어져 모든 계산은 다른 열을 참조하게 되어 있었고, 그 참조는 다시 80만개의 셀 중 어느 셀을 참조할지를 찾아야 하는 일이 일어났습니다. 당연히 엑셀은 뭐 하나 건드리면 몇 분씩 얼어버렸고, 처리에 집중할 수가 없었습니다.
엑셀 계산 속도를 향상시키는 여러 가지 방법을 찾아봤는데, 당장 시도해볼 수 있는 것들은 최소한 엑셀이 계산을 위해 하염 없이 굳어버리는 상황을 사전에 예측이나마 할 수 있게 만들어 주었습니다. 적어도, 엑셀이 굳고 나면 가서 잠깐 자고 올지, 아니면 커피를 한 잔 타서 마시고 올지, 화장실에 다녀올지, 은행에 다녀올지를 결정할 수 있습니다.
일단, 같은 계산 결과를 여러 곳에서 사용한다면 저처럼 멍청하게 - ㅜ_ㅜ - 결과를 필요로 하는 모든 셀에 수식을 집어넣지 말고 독립된 셀에 계산을 한 다음, 그 셀을 참조하도록 만들면 계산을 한 번만 할 수 있습니다. 제가 사용했던 수식은 < 그 열에서 값을 가져와라 (어느 열인지 찾아서) > 였는데, 저 '어느 열인지 찾아서' 부분이 80만열 중 하나를 찾는 계산을 했습니다. 이걸 여러 셀에 붙여넣고 보니 시시각각 얼어붙는 엑셀 앞에서 뜨거운 콧바람을 토해낼 수밖에 없었지요. < 그 열에서 값을 가져와라 (이미 찾아둔 열 위치) > 같은 식으로 표현하면 엑셀이 얼어붙은 동안 은행에 가는 대신 화장실에 다녀오는 정도로 끝낼 수 있습니다.
두번째로 덕을 본 건, 범위 내에서 검색을 하는 경우, 미리 다른 계산을 통해 범위를 줄여 주면 큰 도움이 된다는 것입니다. 언듯 생각했을 때는 범위를 지정하기 위해 사전에 수행하는 계산이 그냥 80만 열을 검색하는 것보다 더 느릴 거라고 생각했고 실제로도 그랬지만, '80만 열을 검색하는 것'을 '80만번' 수행하려고 보니 미리 계산을 해서 '80만 열'을 한 '2000열' 정도로 줄이는 것이 큰 도움이 되었습니다.
세번째로 시도한 것은 상대적으로 더 느린 내장 함수를 좀 더 빠른 내장 함수 형식으로 고치는 것이었습니다. 사실, 더 느린줄 알면서도 그 함수를 쓰는 이유는 그 함수가 더 편하기 때문인데, 대표적으로 'VLOOKUP' 같은 것이 그렇습니다. 이 함수는 'MATCH'와 'INDEX'의 조합으로 고칠 수 있는데, 후자가 조금 더 빠르고, 이걸 수십만번 반복하다 보면 더 큰 차이가 납니다. 하지만 셀을 수정하는데는 훨씬 더 귀찮아집니다.
마지막으로, 최대한 데이터를 필터링 하지 않습니다. 처음에는 필터링한 결과에만 수식을 추가해 계산 횟수를 줄이려고 했는데, 열이 아주 많고, 필터링한 결과의 연속되지 않는 범위 수가 2048개보다 많으면 수식을 아래 셀에 연속해서 붙여넣을 수 없게 됩니다. 아마 '범위가 너무 복잡하다'는 메시지가 나올 겁니다. 그래서, 수식을 필터링 하지 않은 모든 셀에 붙여넣되 'IF()'로 감싸서 필터링에 나오지 않을 조건이면 계산을 수행하지 않는 식으로 해서 엑셀이 얼어붙은 동안 화장실에 다녀오는 대신 기지개를 한 번 펴고 주변을 서성이는 정도로 끝낼 수 있게 되었습니다.
... 적어놓고 보니 프로그램 동네에서는 본능적으로 당연하게 생각할 만한 것들 뿐인데, 괜히 최신 프로세서와 널럴한 메모리만 믿고 깝치다가 완전 바보됐습니다. 위에 이야기한 링크에는 계산을 빠르게 하기 위한 여러 가지 팁들이 널려 있는데, 그 중에는 프로세서나 메모리를 업그레이드 하는 아주 소극적인 방법부터 편의를 위해 여러 기능을 포함하는 대신 느리게 만들어진 내장 함수를 대체해 버리는 적극적인 방법도 있습니다. 기회가 되면 시도해 보는 것도 신나겠습니다.