텍스트 형식으로 된 수식의 결괏값을 알아내기 위해 사용자 정의 함수를 작성했는데,
이렇게 하지 않고,
VBA의 Evaluate 함수를 이름관리자에서 사용할 수 있는 방법이 있었습니다.
워크시트에는 Evaluate함수가 없으므로 수식에 직접 사용할 수는 없습니다.
1. 이름 짓기
(1) 수식 - 이름관리자를 선택하거나, 수식 이름 정의를 클릭
B1셀을 선택한 상태에서 수식 - 이름관리자를 선택하거나, 수식 이름 정의의 콤보 상자 버튼이 아닌 왼쪽을 클릭합니다.
(2) 이름 정의 및 참조 대상 입력
그러면, 이름에 _2_20_1이라고 표시되는데,
적당한 이름을 지정합니다. '계산'이라고 하겠습니다.
그리고, 참조대상에
일반적으로는 =evaluate(까지 입력하고,
A1셀을 클릭하고 괄호를 닫으면 되는데,
예제 파일에는 특수한 공백이 있어서
SUBSTITUTE(A1,UNICHAR(160),"")라고,
유니코드 160에 해당하는 공백을 빈 문자로 바꾸는 수식을 넣어줘야 합니다.
그러면 참조대상은
=evaluate(SUBSTITUTE(A1,UNICHAR(160),""))이 됩니다.
확인 버튼을 누릅니다.
그러나 이름 관리자 명령을 사용한 경우는 아래와 같이 이름 관리자 창이 나타나므로 닫기 버튼을 한번 더 눌러야 합니다.
2. 셀에 적용하기
B1셀에 =계산이라고 입력하면 값 40이 구해지고,
B1셀 오른쪽 아래 네모 모양의 채우기 핸들을 더블 클릭하면 맨 아랫줄까지 수식이 채워지는데, 왼쪽 셀을 참고해서 결괏값이 구해집니다.
3. 파일 형식 *.xlsm으로 지정
파일에서 저장 버튼을 누르면 바로 저장되는 것이 아니고,
아래와 같이 "정의된 이름으로 저장된 Excel 4.0 함수는 매크로 제외 통합 문서에 저장할 수 없다"라고 하면서
예, 아니요 등을 묻는데 아니요를 선택하고,
문서 형식 오른쪽 콤보 상자 버튼을 누른 후 매크로 사용 통합 문서(*.xlsm)으로 저장해야 합니다.
4. 제약 사항
이름관리자에 등록했으므로 다른 파일에 적용할 수 없고,
다른 파일에 다시 이름을 등록해야 합니다.
이것은 사용자 정의 함수의 경우는
추가 기능(*.xlam) 파일에 저장해 놓으면 어떤 파일에서나 사용할 수 있는 것과 다른 점입니다.
5. 추가 기능 파일 만들기
이 글에서 공백대체(완성).xlsm 파일을 다운로드한 후 엷니다.
그리고, 다른 이름으로 저장 메뉴를 누른 후
추가 기능(*.xlam 또는 *.xla)을 누르고,
저장 버튼을 누릅니다.
그러면 "C:\Users\사용자명\AppData\Roaming\Microsoft\AddIns" 폴더에 저장됩니다.
6. 추가 기능 파일 등록하기
파일 - 옵션 - 추가 기능에서 이동 버튼을 누르거나 개발도구 - Excel 추가 기능 메뉴를 누르면
아래와 같은 추가 기능 창이 표시되는데, 찾아보기 버튼을 누르면
AddIns 폴더의 추가 기능 파일이 표시되므로 이것을 클릭한 후 열기 버튼을 누릅니다.
그러면 아래와 같이 '공백대체(완성)이란 추가 기능 파일이 추가됩니다. 확인 버튼을 누릅니다.
7. 추가 기능 파일의 사용자 정의 함수 사용하기
이제 위에서 만든 공백대체(이름관리자).xlsm 파일의 C1셀에
=calc_text(SUBSTITUTE(A1,UNICHAR(160),""))라고 입력하면
이 파일에는 calc_text란 사용자 정의 함수가 없지만 추가 기능 파일에 있기 때문에 에러 없이 값이 구해집니다.
만약 추가 기능 창에서 '공백대체(완성) 왼쪽의 체크를 지운 다음 확인 버튼을 누르면
='C:\Users\lsw32\AppData\Roaming\Microsoft\AddIns\공백대체(완성).xlam'!calc_text(SUBSTITUTE(A1,UNICHAR(160),"")) 라고
calc_text 사용자 정의 함수가 있는 폴더 및 파일명과 !가 앞에 생기는데 이 부분을 지우면
사용자 정의 함수를 찾을 수 없기 때문에 #NAME! 에러가 발생합니다.
'Excel' 카테고리의 다른 글
한글과 영문을 기준으로 숫자 분리하기 (0) | 2023.09.01 |
---|---|
휴일에 해당하는 열에 색칠 하기 (2) | 2023.08.25 |
공백의 코드 값이 여러 가지입니다. (0) | 2023.08.20 |
Microsoft 365의 달라진 메모 기능 (0) | 2023.08.19 |
동적 배열 수식과 유출된(Spilled) 범위 연산자 # (0) | 2023.08.17 |