glekang.com
my life, but a game
SEARCH BLOG | TAGS

'VBA'에 해당되는 글 1건

[글강, 2005/11/11 03:59, Life]
혹시나 이 허접한 블로그에 들르는 분들 중에 게임 기획자를 꿈꾸고 계신 분들이 있다면... 그분들께 일단 올리는 한 말씀...

MS오피스와 친해지셔야 합니다.
매우 친해지셔야 합니다.
절대로 친해지셔야 합니다.
수많은 밤을 MS오피스와 함께 열정적으로 하얗게 불태우고도, 질리지 않을 정도로 친해지셔야만 합니다.


에... MS오피스를 구성하는 놈들 중에 어느 녀석과 특히 친해져야 하냐고 물으신다면... 전 제품군이랑 다 친해지셔야만 합니다 -_-/

미리미리 숙련해 두세요 -_-/

... 하지만 MS오피스를 사랑하지는 마세요.
아니 사랑하게 될거라곤 애초에 믿지도 않습니다 -_-;

(대체 오피스 어플리케이션군에 대해서라면 일단 논외로 칩니다 ~_~)




요즘들어 주로 사용하는 엑셀이라는 놈은 참... 잘 만들었다는 것까지는 인정해 주겠다. VBA라는 매우 쉬운 스크립트를 활용하여 오만잡다한 업무 처리가 가능하다는 점도 높게 사주겠다.

하지만... 그러나... -_-

이 엑셀에 포함된 VBA라는 놈이 다루면 다룰수록 미칠듯이 미묘하다.



엑셀 VBA의 내장 함수 중에는 Str(number)라는 놈이 있다. 이 함수의 역할은 숫자값인 number를 문자값으로 변환해주는 역할...

즉,

A = Str(123456)

이라고 하면 A의 값은 string인 "123456"이 되는 것이다.

그러나... 우리의 미묘하신 VBA 사마께서는... 이놈을 곱게 "123456"으로 두지 않으신다.

이거이 버그인건지, 아니면 무슨 의도가 있는건지... 영문을 모르겠지만 A = " 123456"이 되어버리는 것이다. 앞에 공백이 한칸 들어간다 -_-;;;

... 이놈의 공백이 대체 왜 들어가는 거지??? 뭐에 쓰라는겨??? 덕분에 이 공백을 없애주는 수고가 한번 더 들어가 버린다.



이런 때를 위해 준비되었... 다고 믿었던 함수 등장.

Trim(string)

이 함수의 역할은 string 내에 포함된 공백을 없애주는 것이다. 오 그럼 Str(number)의 저 알 수 없는 문제는 이 함수로 해결될...

리가 있나!!!

이 Trim(string)이라는 놈도 졸라리 미묘한 것이,

A = Trim(" 트림 바보 ")

라고 하면... A = "트림바보"가 되는 것이 아니라, A = "트림 바보"가 되어버리는 것이다!!! 또 공백이 한칸!!!

이런 ㅁㅇ호잏믈일앞 ㅡㅁ미ㅏㄹㅇㅁㅎ이!!!

즉 Trim(string)은 'string에 포함된 공백 중 외곽의 공백만을 없애주는 역할'이었던 것이다 -_-;;;

심지어 매뉴얼에는 '한칸의 공백만을 남깁니다'라고 친절하게 설명되어 있기도.... 하지만 "트림 바보 멍청이"같은걸 Trim에 넣고 한바퀴 돌리면... 그대로 "트림 바보 멍청이"가 나온다. 공백이 2칸인데???



... 아니 그럼 대체 무슨 함수를 써야 문자열 내에 포함된 '모든' 공백을 날려버릴 수 있는거야???

... VBA에 포함된 모든 내장함수 목록을 살펴봤으나... 구글 사마께 여쭤보기도 했으나... 답을 못찾았다 -_-;;;

설마 정말 없는걸까? -_-; 마이크로소프트는 공백에 그렇게도 깊은 애정을 가지고 있어서 절대 없애지 못하게끔 해놓은 것일까???



그러다 찾아낸 것이 Replace() 함수.

역할은 이름 그대로 문자열 내에서 특정 문자를 찾아낸 후 다른 문자로 치환해주는 것이다.

즉, " "을 찾아내서 ""로 바꿔주면 된다는 이야기지!

그래서 드디어 해결을 보는구나! 룰루랄라 코드 적어놓고 실행!

... 에러!

얼라료? 이번엔 뭐가 불만인건데??? 음? 형식이 틀리다고??? 아니 무슨 형식이???

아 역시 미칠듯이 미묘한 우리의 VBA 사마...

알고보니 엑셀에서 자동적으로 접속해 긁어오는 온라인 매뉴얼과, 엑셀 내부에 자체 포함되어 있는 매뉴얼의 내용이... 틀리다 -_-;

REPLACE(old_text,start_num,num_chars,new_text)

... 이것은 온라인 매뉴얼에 나와있는 Replace()의 구문 설명.

Replace(expression, find, replace[, start[, count[, compare]]])

... 이것은 엑셀에 자체 포함된 매뉴얼에 나와있는 Replace()의 구문 설명.

... 인수가 전~~~~~~~~~~~~~~~~~~~~~~혀 틀리잖아!!!

이런 시밤바 대체 어느걸 믿으라는 거야 -_-;

결국 정답은 아래의 방식. 아니 그럼 위에 있는 구문은 대체 어디 써먹는건데 엑셀 매뉴얼에 뜨는거지? ;;;



그리하야... 코드 작성은 2~3시간 만에 끝내놓고는... 4시간여에 걸쳐 저놈의 몇몇 구문 수정에 매달리다 보니... -_-;;;

결국 집에 못들어갔다 OTL 지금은 새벽 4시 ;ㅁ;




조엘 아저씨, 엑셀 개발팀이었다고 했죠?

당신 나한테 감점이야!!!
Trackback Address :: http://glekang.com/trackback/166
하이얼레인 | 2005/11/11 06:10 | PERMALINK | EDIT/DEL | REPLY
더 복잡한 애들 만들면서 OOP로 넘어가시면 또 한번 좌절하신다에 한표( '')y~

고생하셨어요:)

덧 : 암만봐도... VBA말고 다른 언어로 엑셀 객체에 접근하는 쪽이 백만배 효율적이지 않을까 생각중-_-;;;
밀피유 | 2005/11/11 11:30 | PERMALINK | EDIT/DEL | REPLY
저희도 오피스 매크로는 정말 많이 사용합니다. 아마 매크로가 없으면 삽질작업에 파멸해버릴지도 몰라요. 그건그렇고, trim() 함수는 원래 문자열의 앞뒤 공백만 잘라내는 함수가 맞습니다. 중간에 있는 공백을 제거하려면 다른 방법을 사용해야 할 겁니다. 그리고 대문자로 표기된 함수는 엑셀 워크시트에서 직접 사용하는 함수이고, 후자는 VBA에서 사용하는 함수입니다.

VBA가 없다면 정말, 반복되는 삽질작업에 파멸하고 말거에요 ;_;
밀피유 | 2005/11/11 11:33 | PERMALINK | EDIT/DEL | REPLY
아. 빼먹었는데, str() 함수의 선행 공백은 부호를 표시하기 위한 것입니다. 출력을 파일로 한다면 모르겠지만, 매크로의 출력을 엑셀 워크시트로 하는 경우에 부호를 위한 1바이트짜리공백은 무척 유용합니다. 버그가 아니지요.
글강 | 2005/11/11 12:07 | PERMALINK | EDIT/DEL | REPLY
밀피유 // 네 말씀하신 바대로 '출력을 파일로 하는 작업'이었기 때문에 고생했어요 흑흑

그리고 엄밀히 말해 trim()과 replace()는 -.-; VBA 자체의 문제라기 보다는... 메뉴얼의 문제였죠 ;;; 메뉴얼 타고 흘러흘러 가다가 내버린 시간이... 흑흑흑

그나저나 매크로 없으면... 정말 파멸이죠. ㅎㅎㅎ
글강 | 2005/11/12 12:57 | PERMALINK | EDIT/DEL | REPLY
라프 // 아하하하하 -_-; 저런거엔 안속습니다 낄낄
고어핀드 | 2005/11/12 22:35 | PERMALINK | EDIT/DEL | REPLY
...여자보다 더 미묘한 생물이로군요[아니 누가 들으면 연애라도 해본 줄?]
글강 | 2005/11/15 12:21 | PERMALINK | EDIT/DEL | REPLY
로리콘 즐이라니까효 ( --)
Name
Password / Secret
Homepage






BLOG main image

«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

전체 (275)
Life (154)
Game (121)

그럴리가염ㅋ
글강 08/30
넹~ ㅇㅅㅇ
글강 07/27

한마디 - 잠언箴言
고어핀드의 망상천국 2009
왕멀의 생각
wangmul's me2DAY 2009
새해 덕담 - 진정한 위로
고어핀드의 망상천국 2009
실패한 스쿼드 게임 '블..
게임을 만드는 한사람의.. 2008
한마디 첨언하자면.
하이얼레인의 얼음집'▽.. 2008

SharedSHELL

Tattertools

rss