728x90

 

 

엑셀은 수식이라는 형태로 계산을 할 수도 있고, 복잡한 경우에는 함수를 지원합니다.

보통의 함수들은 매개변수(Input)를 받아서 결과(Out)를 반환하는 형태로 되어있습니다.

그런데 이 함수들이 계산이 불가능한 경우 주로 Input이 잘못된 경우가 있을 수 있습니다.

이럴 때를 대비하여 오류를 지원합니다. 오늘은 이 오류의 종류와 원인에 대해서 알아 보겠습니다.

 

함수의 동작 원리

 

 

① #DIV/0! 오류

 

  • 함수내에서 0으로 나누기를 할 때 발생하는 에러입니다.
    그냥 =10/0을 넣어도 발생하지만 평균(AVERAGE) 함수에서 인수가 전부 0인 경우에도 발생합니다.
    함수의 계산과정에서 0으로 나는게 하나라도 있으면 발생하기도 합니다.
  • 예시 =10/(5*0)
  • 이 에러가 발생하면, 해결 방법은 주로 분모쪽에 0이 있는지, 0으로 곱하고 있지 않는지 확인하면 됩니다.

 

 

② #NAME? 오류

 

  • 함수의 형식으로 입력했는데 함수가 아닌 경우에 발생합니다.
    즉 "이 이름을 모르겠습니다." 에러입니다.
    주로 오타로 함수에 이름을 잘못 입력하는 경우에 많이 발생합니다.
  • 예) =ig() 같은 경우가 있습니다.
  • 그리고 높은 버전에서 동작하는 함수를 사용하려고 했는데 여기서 지원안하는 경우 발생합니다.
  • 이 에러가 발생하면, 함수 이름을 똑바로 입력했는지 확인해야 합니다.

 

 

③ #N/A 오류

 

  • 찾고자 하는 데이터가 없을 때 발생합니다. 따라서 조회함수에서 많이 발생하는 오류입니다.
  • VLOOKUP, HLOOKUP, FIND, MATCH 함수등에서 자주 발생합니다.
  • 별도로 무조건 #N/A에러를 반환하는 =NA() 함수도 있습니다.
  • 예시 =MATCH("AA",A1:D100,0)일 때 발생한다면 주어진 범위에 AA가 없습니다.
  • 이 에러가 발생하면, 범위내에 값이 진짜로 없다는 뜻이니 값을 잘 입력했는지 범위를 잘 설정했는지 확인해야 합니다.
  • 그리고 이 에러는 "범위내에 값이 없는지" 확인하는 용도로도 사용됩니다.

 

 

④ #REF! 오류

 

  • 잘못된 셀 참조가 있을 때 발생하는데 주로 셀을 삭제 해서 없어질 경우에 발생합니다.
    내용 지우기를 한게 아니라 셀을 "삭제"해야 합니다.
  • 복사하거나 오려넣을 때 엑셀의 범위에서 감당이 안될 때 발생합니다.
  • 예시 : =SUM(#REF!)
  • 이 에러가 발생하면, 범위를 확인하고 다시 지정해야 합니다.

 

 

⑤ #VALUE! 오류

 

  • 수식에 잘못된 데이터 유형이 포함되었을 때 발생합니다.
  • 숫자자리에 문자가 들어가거나 범위를 초과하는 경우에 발생합니다.
  • 예시 : =10+10+"ㄱ" 혹은 =SQRT(-10)
  • 이 에러가 발생하면, 수식을 확인하고 참조하는 숫자를 올바로 변경하거나 꼭 해야 한다면 다른 통계툴을 적용합니다.

 

 

⑥ #NULL! 오류

 

  • 잘못된 범위 연산자를 사용했을 때 사용합니다. 주로 범위에 공백이 있을 경우입니다.
    그 외에도 쉼표가 이상한 곳에 들어 있는 등 연산과 관련 에러입니다.
  • 요즘에는 자동 보정으로 많이 수정되어 잘 보기 어려워졌습니다.
  • 예시 : =SUM(A10 B10)
  • 이 에러가 발생하면, 범위를 똑바로 입력했는지 확인하고 다시 입력 해야 합니다.

 


 

에러들을 안 발생하게 막으면 좋지만, 의도적으로 발생할 수도 있고 피할 수 없을 수도 있습니다.

에러 전용으로 처리하는 IFERROR 함수도 있습니다.

아래 링크의 포스팅에서 사용법을 확인해 보세요

 

엑셀(EXCEL) 함수의 오류를 처리하는 IFERROR 함수의 사용법(에러 메시지 숨기기)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
728x90

 

 

보통 엑셀에서는 계열의 크기를 값으로 표시합니다.

하지만 어떤 경우에는 문자로 표시하는 것이 좋을 때도 있습니다.

그리고 셀의 간격을 표현하는 것도 일정한 간격으로 표시됩니다.

아래 완성 그래프처럼 Y축에 글자를 넣고 원하는 곳에 경계선을 긋는 방법을 소개합니다.

 

완성형 그래프

 

 

① 경계선 테이블 만들기

 

우선 경계선을 그을 그래프를 만듭니다.

그래프를 만들기 위해서 원본데이터와 경계선 그래프 2가지가 필요합니다. 

 

그래프 만들 데이터

 

 

② 원본데이터로 그래프를 만듭니다.

 

여기까지는 별거 없습니다.

그냥 평범하게 막대그래프로 만들었습니다.

 

그래프 만들기

 

③ 계열 선택에서 값을 하나 추가합니다.

 

아까 만든 계열표에서 하나만 추가하겠습니다.

여기까지는 평범하게 그려집니다.

 

선택하기

 

 

④ 추가된 계열을 선택하고 분산형 그래프로 만듭니다.

 

추가된 계열을 하나만 선택하고 분산형 그래프로 만들어야 합니다.

그리고는 경계선 데이터를 하나씩 다 추가합니다.

 

분산형으로 변경하기

 

그리고 이 분산형 데이터들은 X축을 보조축으로 설정합니다.

 

보조축 만들기

 

 

⑤ 보조 가로축을 활성화 시키고, 범위를 지정한 후에 레이블을 없음으로 설정합니다.

 

이 때 보조 가로축을 del키로 없애버리면 안되는 겁니다.

그러면 준비가 다 됩니다.

 

 

 

⑥ 계열을 선택하고 오차 막대를 활성화 시킵니다.

 

가로 오차막대를 선택합니다.

그리고 모양과 값을 설정하여 길게 보이게 합니다.

이걸 모든 계열에 한번씩 다 해야 합니다.

 

오차 막대 그리기

 

 

⑦ 표에 레이블을 출력하고 왼쪽에 출력합니다.

 

이제 레이블을 추가합니다.

내용을 계열 이름으로 하고 위치를 설정합니다.

 

레이블 추가하기

 

 

⑧ 여기까지 결과입니다.

 

불필요한 값들이 많습니다.

여기 지워야 할 값들은 숨김으로 하거나 색을 하얀색/투명색으로 해서 보이지 않게 해야 합니다.

안그러면 지워지는 경우가 많습니다.

 

여기까지 그래프

 

 

⑨ 지울것 지우고 완성하기

 

다시 완성본을 보여드리는 것입니다.

여기 과정은 복잡해서 하나하나 보여드리기가 힘듭니다.

거추장스러운것을 전부 지워버리니 나름 보기가 좋습니다.

 

완성본

 

 

 

 

반응형
728x90

 

 

엑셀에서는 계열이 다르면 자동으로 다른 색으로 배치됩니다.

하지만 구간에 따라서 색이 다르게 하는 것은 몇 가지 설정을 통해서 가능합니다.

그리는 방법이 몇가지 있으니 나누어 소개하겠습니다.

 

오늘의 그래프

 

 

1. 하나하나 설정하기

 

① 데이터를 준비하고 선택하고 그래프를 그립니다.

 

아래처럼 한가지 계열로 그려집니다.

여기까지는 기본적인 엑셀의 차트 그리는 방법입니다.

 

평범한 그래프

 

 

② 한 계열을 선택하고 서식을 변경합니다.

 

계열을 한번 클릭하면 그 계열 전체가 선택됩니다.

그 상태에서 한번 더 특정 값을 선택하면 "요소"만 선택이 됩니다.

계열 위에 마우스 커서를 두고 오른쪽 클릭을 하면 "데이터 요소 서식"이 보입니다.

여기서 선을 실선으로 선택하고, 색을 변경합니다.

 

계열설정 바꾸기

 

 

③ 이걸 여러번에 걸쳐서 해줍니다.

 

이 과정을 전 요소에 들어서 걸쳐서 해줍니다.

조금 노동이기는 하지만, 어떤 양식에 해두고 여러번 사용한다고 치면 괜찮은 일이기도 하죠.

완성한 그래프는 이런 모양일 것 같습니다.

 

완성본

 

 

2. 서브 그래프를 만들기

 

이건 보기에는 하나의 그래프이지만 사실은 여러개의 구간으로 만듭니다.

먼저 원본 데이터 옆에 표를 하나 더 만듭니다.

그리고 그리면 방법은 쉽게 만들어 집니다.

표를 먼저 만들고 그래프를 그립니다.

 

표는 아래와 같습니다.

 

표를 하나 더 만들어서 그래프 그리기

 

저는 개인적으로 이 방법을 추천합니다.

표를 하나 더 만들어야 해서 딱 보면 좀 어렵겠다는 생각이 들지만, 사실 무척 간단합니다.

데이터를 이어서 양식으로 만들어두기도 좋은 방법입니다.

한번 만들어두면 계속 쓰기도 좋고요.

 

 

3. 그라데이션 그래프로 그리기

 

사실 이 방법은 된다 뿐이지 추천하지는 않습니다.

그래도 나름 장점도 있어서 한번 설명해 보겠습니다.

방법은 간단하게 그라데이션을 추가합니다.

 

선색을 그라데이션으로 설정합니다.

 

선을 그라데이션으로 할 때 중지선 사이를 아주 가깝게 하면 마치 색이 바로 변한 것 처럼 보입니다.

중지선을 늘리고 배치해서 색이 변한 것처럼 만들어주면 됩니다.

그라데이션 방향을 오른쪽으로 설정하고 중지점을 배치합니다. 

 

오른쪽으로 설정하고 중지점 배치하기

 

직접해보면 느낄 수 있겠지만, 설정하기가 어렵지는 않습니다.

그리고 생각보다 결과물도 나쁘지 않습니다.

아래 그래프가 위와같이 설정한 것입니다.

 

그라데이션으로 만든 결과물

 

살짝 경계선이 보이기는 하지만, 자연스럽습니다.

그리고 이 방법을 이용하면 그라데이션을 추가로 넣고 오히려 효과로 이용할 수도 있습니다.

디자인 센스에 따라서는 가장 보기 좋을 수도 있습니다.

그러나 미리 양식으로 만들어 놓기가 어렵고, 표의 크기나 색상을 조금만 바꾸기 어렵습니다.

반응형
728x90

 

엑셀에서는 셀에 글자를 적을 수 있고 또 이 셀에 메모를 남길 수도 있습니다.

여러사람이 사용하는 엑셀 파일이 배포될 때 메모가 붙어있는 것을 자주 볼 수 있습니다.

 

메모가 들어가있는 문서

 

메모를 많이 활용하고 의존하는 분들이 꽤 많습니다.

오늘은 메모의 모양을 변경하는 방법을 알아 보겠습니다.

 

 

1. 선이나 색상 변경하기

 

메모를 선택하고 오른쪽 클릭을 하면 "메모 서식"에 들어갈 수 있습니다.

"메모 서식"에서 "색 및 선"을 변경할 수 있습니다.

다른 도형과 다르게 옛날 버전의 인터페이스를 사용하고 있습니다.

하기만 이곳에서도 어지간한 설정을 다 할 수 있습니다.

 

메모 선, 배경색

 

 

2. 메모 모양 바꾸기

 

그리고 아예 메모의 모양 그차제를 변경할 수도 있습니다.

이 기능은 바로는 실행이 안되고 사전준비가 조금 필요합니다.

얼마 길지 않으니 아래 내용을 참고해 주세요.

 

① 엑셀 상단의 [파일] - [옵션]으로 들어가 "리본 사용자 지정"으로 들어갑니다.

② 명령을 모든 명령으로 선택해서,

"도형 편집"을 찾습니다.

④ 명령이 추가 될 곳을 선택합니다.

⑤  "삽입" 매뉴에 "새 탭"을 만들어서 선택했습니다.(이건 원하는 곳에 하면 됩니다.)

"추가" 단추를 눌러서 추가된 것을 확인합니다.

그리고 "확인" 버튼을 눌러서 마무리하면 기능이 추가 되었습니다.

 

기능 추가하기

 

 

이제 준비가 되었습니다.

그럼 원하는 메모를 선택하고, 방금 추가한 기능인 "도형 편집" 기능을 클릭하면 "도형 모양 변경"을 할 수 있습니다.

그럼 여러가지 엑셀의 기본 도형이 뜨고 이중에 하나를 선택할 수 있습니다.

이 작업은 한번 해두면 다시 끌 때까지 해당 컴퓨터에서는 설정이 유지 됩니다.

 

도형 모양 변경

 

숨어 있기는 하지만, 기본 도형 기능이기 때문에 정상적으로 작동합니다.

따로 설정하지 않고 변경할 수 있는 기능도 향후 패치등을 통해서 구현 되었으면 좋겠네요.

 

변경된 메모

 

 

 

 

 

 

 

 

반응형
728x90

 

엑셀 같이 원래 장르가 뭐든 문서로 활용할 수 있는 프로그램에서는 검색기능은 필수입니다.

많은 프로그램처럼 엑셀도 영단어 find의 Ctrl + F를 사용하고 있습니다.

엑셀의 찾기 기능과 바꾸기(Ctrl + H) 기능이 붙어 있고 단축키는 달라도 같은 창이 뜹니다.

 

찾기 및 바꾸기

 

찾기 기능에서 문제가 있을 때 해결 방법에 대해서 알아보겠습니다.

 

 

1. 찾는 값이 수식일 때 

 

아래 그림처럼 분명하게 숫자가 있는데 검색을 못하는 경우가 있습니다.

이런 경우 때문에 Ctrl + F를 안쓰는 경우를 많이 보는데 주 원인은 수식임에 있습니다.

 

왜 검색을 못하니

 

엑셀은 기본적으로 수식을 검색하도록 되어있습니다.

결과는 "15"라는 숫자로 표시되지만 수식은 아래처럼 "=C7+C6"으로 입력되어있습니다.

이 때 C7을 검색하면 검색이 되지만 15를 찾기 위해서는 옵션을 변경해야 합니다.

 

엑셀은 디폴트로 수식으로 검색합니다.

 

 

< 해결방법 >

 

① 찾기 및 바꾸기 하단의 "옵션" 단추를 클릭합니다.

"찾는 위치""값"으로 변경합니다.

③ 수식에 들어있더라도 결과값으로 찾습니다.

 

값으로 변경하기

 

이것만 알아도 대부분 해결될 것 같습니다.

그런데 셀이 수식이 아닌데도 안찾아 진다

그럴 때는 셀이 보호되고 있을 확률이 높습니다.

 

 

2. 시트 보호 해제하기

 

상단 매뉴의 [검토] - [보호] - [시트 보호] 혹은 [통합 문서 보호]가 있습니다.

여기서는 다양한 기능에 Lock을 걸어서 사용에 제약을 거는 매뉴입니다.

이 매뉴에서 "잠긴 셀 선택"이 해제되어 있으면 검색기능을 활용할 수 없습니다.

 

저렇게 잠긴 셀 선택을 못하게 하면 안됩니다.

 

 

<해결방법>

 

간단하고 당연하게 시트 보호기능을 꺼주면 됩니다.

만일 푸는 비밀 번호를 모를 때는 파일을 관리하는 관리자에게 물어봐야 할 것입니다.

 

 

3. 찾는 문자가 와일드 카드(~, *, ?) 일때

 

엑셀에서는 검색 와일드 카드를 제공합니다.

~는 부정을 *는 모두다 ?는 한글자에 한해서 모두다 입니다.

그런데 찾을 값 자체가 ? 글자다 이러면 검색 기능이 잘 동작하지 않습니다.

 

 

<해결방법>

 

이럴 때는 검색을 하는 글자 앞에 ~를 붙이면 됩니다.

통상적인 상황에서 ***를 검색하면 값이 있는 모든 셀을 대상으로 합니다.

앞에 ~를 붙여주면 단일 *** 글자를 검색합니다.

~를 붙이면 정상적으로 찾아집니다.

 

반응형
728x90

사방에서 번호를 찾을 수 있습니다.

전자제품이나, 학생번호, 시설번호 등등 다양한 일련번호를 사용합니다.

이런  번호에는 그 자체로도 어느정도 정보를 넣어서 만드는데 대충 아래 같은 것들을 넣습니다.

 

전자제품 일련번호의 예

 

엑셀에 익숙하신 분들은 이런 형식에 일련번호에서 "제작날짜"만 추출하거나 하는 경우가 있을 것입니다.

(참고링크 : 엑셀(EXCEL) 글자 수로 짤라 추출하는 LEFT, RIGHT, MID함수로 텍스트 편집)

그런데 이건 형식이 똑같은 경우에만 사용할 수 있고 두개 이상의 형식이라면 어려워집니다.

밑의 예시에 모델명을 보면 회사가 달라 서로 다른 형식으로 번호가 부여되어 있습니다.

 

 

<< 사용할 예시 >>

 

예시 테이블

 

A사는 모델 고유명이 앞의 4개 영문이고 "-"로 구별되어 있습니다.

B사는 앞의 3개의 영문명이 모델 고유명이고 " "(공백)으로 구별되어 있습니다.

이 때 앞의 모델 고유명만 뽑아오는 함수를 작성하겠습니다.

먼저, Find 함수와 IFERROR 함수에 대해서 알아야 합니다.

Find 함수 소개 링크

IFERROR 함수 소개 링크

 

 

 

<< 함수내용 >>

 

IFERROR 함수와 Find 함수를 조합한 것으로 내용은 

"=IFERROR(LEFT(C3,FIND("-",C3)-1),LEFT(C3,FIND(" ",C3)-1))"가 됩니다.

조금 복잡한 함수에 대해서 설명하겠습니다.

 

함수의 내용

 

① FIND 함수 : 문자 안에서 "-"가 어디 있는지 찾아냅니다. "-"까지는 필요 없음으로 -1을 적용합니다.

② LEFT 함수 : 문자에서 "-" 바로 앞까지 출력하면 모델 고유명이 됩니다.

③ IFERROR 함수 : 다른 회사는 "-"를 쓰지 않기 때문에 ERROR가 발생합니다. 그럼 다음항으로 넘어갑니다.

④ FIND 함수(두번째) : 문자 안에서 " "를 찾습니다. " "은 필요없음으로 -1을 적용합니다.

⑤ LEFT 함수(두번째) : 문자에서 " " 바로 앞까지 출력하면 모델 고유명이 됩니다.

 

이 방식으로 3가지 4가지도 적용해서 진행할 수도 있습니다.

하지만 함수는 일괄적용이라서 동시에 두 가지 문자를 같이 사용한다던가, 여러 복잡한 형태가 이어지면 한계가 있습니다.

이건 좀 원본 데이터가 조금은 단순해야 사용할 수 있는 것이라고 생각해 주세요.

 

적용결과

 

단순한 제 시트에서는 정상적으로 적용되는 것을 확인했습니다.

만일 복잡해지면 VBA나 임시시트를 활용하는등 방법을 찾아야합니다.

계속 복잡해지면 언젠가는 DB 개념도 나올 것입니다. 이때는 더이상 엑셀이 문제가 아니겠죠.

 

 

반응형
728x90

엑셀에서는 수식을 입력하거나 함수를 사용할 수 있는데 함수마다 제약이 있습니다.

한도를 넘기거나 제약을 어기게 되면 에러가 발생하여 오류 표시 문자가 발생합니다.

예를 들어 0으로 나누려고 하면 #DIV/0! 에러가 텍스트를 더하려고하면 #VALUE! 에러가 뜹니다.

오류를 피해가면서 문서를 작성해야 하겠지만 그게 어려운 경우도 있습니다.

 

일간 생산량표

 

위의 일간 생산량처럼 주말에는 일을 안하기 때문에 평균값을 계산하는 AVERAGE 함수가 에러가 납니다.

함수 내부에서 표본이 0개가 되어 0으로 나누려고 하기 때문입니다.

그냥 넘길 수도 있지만 이 문서가 다른 곳에 쓰이거나 할 때 보기 싫거나 다른 오류를 낼 수 있습니다.

그럴 때 사용할 수 있는 IFERROR 함수를 소개합니다.

 

IFERROR(value, value_if_error) : 수식에서 오류가 발생할 때 오류를 처리할 수 있습니다. 오류가 발생하지 않았을 때는 원래 수식을 반환합니다.

  • value : 오류를 검사할 항목으로 단순한 숫자나 텍스트는 전부 참으로 처리합니다.
  • value_if_error : value 항목이 오류일 때 반환할 값 혹은 수식입니다.
    에러 : #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!
  • 엑셀의 수식이 오류로 반환할 때 작동하고 필수요소가 없다든지 하는 일반오류일 때는 동작하지 않습니다.

 

에러를 판별

 

참과 거짓을 판별하는 if 함수들과는 다릅니다.

애시당초 엑셀에서는 거짓 False와 오류는 다른 개념이기도 하고요.

에러인 #VALUE!를 타이핑해서 입력한다고 에러로 판단하지는 않습니다.

 

 

< 예시 >

 

사용예시

 

설명은 단순했지만 예시가 굉장히 다양합니다.

value_if_error 칸에 ""을 입력하면 빈칸으로 처리할 수 있고, 0을 넣어도 됩니다.

그외에도 다른 값, 참조, 수식을 실행시킬 수 있고 다중 IFERROR 문도 가능합니다.

 

 

반응형
728x90

 

 

엑셀에서는 보통 여러개의 시트를 사용해서 문서를 구성합니다. 

VBA에서 이름이 겹치는 경우 바로 에러를 발생하면서 종료되는데요.

시트 이름 겹치기 에러에 대해서 처리하는 방법에 대해서 알아보겠습니다.

 

 

엑셀 시트 리스트

 

일반 엑셀 인터페이스에서는 이름은 겹치지 않도록 되어있고 만일 겹치게 되면, 

"이미 사용되고 있는 이름입니다. 다른 이름을 선택해주세요."라는 메시지가 출력됩니다.

올바른 이름을 설정할 때까지 여기서 빠져나가지 못하게 되어 있습니다.

또 VBA에서는 '1004' 런타임 오류가 발생하였습니다. 라고 하면서 코드가 종료됩니다.

 

시트 이름 에러

 

 

이 '1004' 런타임 에러는 꼭 회피 해야 하는 현상 중 하나입니다.

엑셀 내에서는 이름이 같은 시트를 허용하지 않고 예외처리도 안되게 되어 있습니다.

이번 포스팅에서 시트를 만들어서 이름을 할당할 때 중복되는 시트를 어떻게 처리하는지 알아보겠습니다.

 

 

 

1. 중복되는 시트가 있으면 지우고 새로 만들기 

 

깔끔하게 처리하는 방법입니다.

기존에 있는 시트에 예상하지 못한 작업물까지도 처리가 가능한 장점이 있습니다.

주로 임시로 발생하는 데이터를 저장하는 용도의 시트등에 사용가능합니다.

 

 

<< 코드 >>

Sub make_sheet()
' 시트 이름은 A로 지정하겠습니다.
On Error GoTo 만들기    '오류가 나면 만들기로 이동하기
    Set ws1 = ThisWorkbook.Sheets("A")
' 시트삭제시 나오는 경고 메시지 끄기
    Application.DisplayAlerts = False
        ThisWorkbook.Sheets("A").Delete
    Application.DisplayAlerts = True
만들기:
    Set wsTemp = ThisWorkbook.Sheets.Add
    wsTemp.Name = "A"
On Error GoTo 0 ' 오류 처리 종료

End Sub

 

 

① On Error GoTo 만들기 : 에러가 발생하면 "만들기" 항목으로 이동합니다.

② Set ws1 = ThisWorkbook.Sheets("A") : ws1이라는 개체에 시트 "A"를 할당합니다.

  - 시트 A가 있으면 아래줄로 이동합니다.

  - 시트 A가 없으면 오류가 남으로 "만들기"로 이동합니다.

③ Application.DisplayAlerts = False : 시트를 지울 때 뜨는 에러메시지를 잠시 끕니다.(사용자가 번거로움으로)

                                                            목적이 달성된 후에 다시 True로 변경합니다.

④ ThisWorkbook.Sheets("A").Delete : 시트 A를 지웁니다.

⑤ 만들기 : 

  - Set wsTemp = ThisWorkbook.Sheets.Add : 시트를 만듭니다.

  - wsTemp.Name = "A" : 만들어진 시트에 A라는 이름을 붙입니다.

 

결과 코드는 A라는 시트가 있으면 지우고 다시 만들고, 없으면 시트를 만들어 A라는 이름을 붙입니다.

 

 

 

2. 시트가 있으면 뒷 번호를 달아서 계속 만들기

 

자주 사용하는 방법입니다.

기존의 정보를 유지하면서 계속해서 시트를 만들어내서 정보의 손실이 없습니다.

다만 너무 많이 작업하면 늘어난 작업물을 따로 사용자가 삭제해야 합니다.

 

<< 코드 >>

Sub make_sheet_2()
' 시트 이름은 B로 지정하겠습니다.
' 워크시트 ws를 nothing으로 초기화 하기 위해서 선언
Dim ws As Worksheet

On Error Resume Next ' 오류 발생 하면 무시하고 다음 줄로 이동
    Set ws = ThisWorkbook.Sheets("B")
On Error GoTo 0 ' 오류 처리 종료

If Not ws Is Nothing Then
' 시트가 존재하면 IF문 실행하기
' 시트가 없을 때까지 DO - LOOP문 실행하기
    Do
        wsCount = wsCount + 1 ' 번호 올리기
        newPasteSheetName = "B" & wsCount   ' 번호 붙이기
        Set ws = Nothing
        On Error Resume Next
        Set ws = ThisWorkbook.Sheets(newPasteSheetName) ' 번호가 붙여져 있는 이름이 있는지 찾기
        On Error GoTo 0
    Loop While Not ws Is Nothing ' 있으면 다시 하기
Else
        newPasteSheetName = "B" ' 시트가 없으므로 이름 그대로 사용
    End If
    
' 새로운 시트 생성하여 이름 붙이기
    Set wsB = ThisWorkbook.Sheets.Add
    wsB.Name = newPasteSheetName

End Sub

 

 

① Dim ws As Worksheet : 워크시트 ws를 선언하면 ws가 nothing으로 초기화 되어있습니다.

                                           다른 방법으로 만들면 ws는 empty로 저장됨으로 뒤에 코드가 작동하지 않습니다.

② On Error Resume Next : 에러가 나면 무시하도록 합니다.

③ Set ws = ThisWorkbook.Sheets("B") : B라는 시트가 없으면 오류가 나고 무시함으로 ws는 계속 nothing입니다.

                                                                 B라는 시트가 잇으면 뭐라도 들어가게 됩니다.

④ If Not ws Is Nothing Then : ws가 있으면 동작하는 IF문입니다.(정확하게 nothing이 아니면 동작합니다.)

⑤ Do ~ Loop While Not ws Is Nothing : ws가 없을 때까지 반복합니다.(정확하게는 ws가 nothing 아니면 멈춤)

⑥ wsCount = wsCount + 1, newPasteSheetName = "B" & wsCount : 번호를 붙입니다.

⑦ Set ws = ThisWorkbook.Sheets(newPasteSheetName) : 번호가 붙은 시트가 있는지 확인합니다.

 

시트 이름이 없을 때 까지 번호를 붙여서 나아갑니다.

엑셀에서 허용하는 워크시트의 개수인 255개가 될때까지 반복해서 실행합니다.

 


 

오늘 사용하는 코드는 간간히 지인들에게 코드를 짜서 줄때 시트이름을 막 바꿔도 오류가 안나는 소스입니다.

제가 혼자 쓰는 경우에는 귀찮아서 작성하지 않다보니 자주 까먹고 다시 만들어야 하더군요.

이번 기회에 이렇게 정리해봅니다.

위에 이미 소스가 있어서 크게 예제가 필요하지는 않겠지만 첨부도 올려봅니다.

 

VBA 예제-시트 만들기.xlsm
0.02MB

 

 

 

 

반응형
728x90

이제 얼마 안되서 문자를 사용하지 않는 시대가 올 것도 같습니다.

여전히 여러가지 상황에서 인쇄물은 필요한 것이고 격식을 가져야 하는 곳에서는 더욱 그렇습니다.

간략한 문서에 이름만 변경해서 출력하는 경우가 특히 그렇습니다.

 

OOO 자리만 변경하면서 출력하는 것을 생각해 보겠습니다.

 

이미 워드나 한글에서는 이 기능이 구현되어 있습니다.

하지만 오늘은 엑셀을 사용해보려고 했더니 딱히 쓸만한 기능이 안보이더군요.

그래서 VBA로 짜보려고 합니다.

 

< 소스코드 >

 

Sub Change_Value_Print()

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim i As Integer
        
    FileNm = ThisWorkbook.Name '파일이름을 입력합니다.
        
    '워크시트 설정하기
    Set ws1 = Workbooks(FileNm).Sheets("Sheet1")
        
    Change_Value = ws1.Range("E4")
    Print_Sheet = ws1.Range("E5")
    Value_cell = ws1.Range("E6")
    Print_Range = ws1.Range("E7")
    
    Set ws2 = Workbooks(FileNm).Sheets(Print_Sheet)
       
    Set rng = ws1.Range(Change_Value)
    
    ' Sheet1의 지정한 범위를 반복합니다.
    For Each cell In rng
        '변경할 값을 입력하기
        ws2.Range(Value_cell).Value = cell.Value
        
        '입력한 출력범위 만큼만 출력하기
        ws2.Range(Print_Range).PrintOut
        
        '대기시간을 1초 추가하겠습니다.
        Application.Wait (Now + TimeValue("00:00:01")) ' 1초 대기
    Next cell
End Sub

 

소스코드 내에 있는 주석으로 설명은 충분하다고 생각됩니다.

코드를 사용하기 위해 Sheet1에는 아래와 같은 내용이 있습니다.

 

< 소스 사용하기 >

 

① 값을 입력할 범위, 출력할 시트 이름, 변경할 셀과 프린트할 범위를 입력합니다.

 

Sheet1에 들어갈 내용

 

② 변경할 값을 입력합니다.

아래에서는 B14부터 아래로 B17까지 입력했습니다.

더 길게 적어도 되게 범위는 직접 적어두게 했습니다.

 

③ 시작 버튼을 누릅니다.

기본 프린터와 프린터 설정된 내용을 따릅니다.

테스트할 때 Print가 없이 Microsoft Print to PDF를 사용해도 정상 동작하더라고요.

대부분 환경에서 문제 없을 것이라고 생각됩니다.

 

PDF 프린터에서도 잘 동작합니다.

 

설명으로는 잘 이해가 안될 수도 있습니다.

아래 파일을 공유하겠습니다.

 

한, 두번 직접 입력해보시면 충분할 것이라 판단됩니다.

 

연속 인쇄하기.xlsm
0.02MB

 

 

 

반응형
728x90

소수점 이하의 자리가 없는 수를 정수라고하고 물건을 세는 등 일상생활에서 많이 사용합니다.

2개 단위로 짝을 이루는 수를 짝수, 짝을 이루지 못하는 수를 홀수라고 합니다.

 

짝수는 짝이 맞아떨어지고 홀수는 남는 1개가 있습니다.

 

 

이 짝수와 홀수를 출력하는 함수 두개를 알아보겠습니다.

 

1. ODD 함수와 EVEN 함수

 

ODD(number) : 가장 가까운 홀수로 올림한 수를 반환합니다.

EVEN(number) : 가장 가까운 짝수로 올림한 수를 반환합니다.

  • number : 올림할 수입니다. 수자체는 양수든 음수든 상관없습니다.
  • 텍스트를 입력하면 #value 오류를 반환합니다.
  • 0에서 먼 값을 출력하게 됩니다.
  • 이미 입력한 숫자가 짝수이거나 홀수이면 그냥 그 숫자를 그대로 반환합니다.

 

ODD 함수의 경우

 

0에서 먼 값에 대해서는 양수는 큰 쪽으로 음수는 작은 쪽으로 움직인다는 것입니다.

절대값이 큰쪽으로 보면 됩니다.

ODD(2) = 3이 되고 ODD(-2) = -3이 되는 것입니다.

 

 

2. 짝수와 홀수의 쓰임처

 

얼핏 일상에서는 생각하기 힘들기는 하지만 생각보다 많은 사용처가 있습니다.

몇가지 예시를 소개해보겠습니다.

 

① 홀수로 변환할 때 

 

여러 모델이 있는 겨우, 부품이 파츠가 짝을 이루고 나서 손잡이 부분이 하나 필요하다고 합시다.

이때 디자인에 손잡이가 없으면 하나 제공해야합니다.

이럴때는 원래 홀수면 내버려두고, 홀수가 아니면 한개를 추가하게 됩니다.

 

② 짝수로 변환할 때 

 

포장지에는 효율적인 관리를 위해 짝수로 들어가야 하는 경우가 많습니다.

이런 경우 만일 홀수가 나오면 더미로 넣어야 함으로 하나 더 준비해야 합니다.

 

 

이런식으로 숫자가 고정적으로 사용되어야 하는 경우가 많이 있습니다. 

가장 가까운 홀짝을 찾는 것은 눈으로도 할 수 있지만 미리미리 양식에 적용해두면 실수를 줄일 수 있습니다.

 


위에서든 포장같은 경우 좀더 복잡한 상황에도 대응할 수 있는 MROUND 함수가 있기는 합니다.

MROUND 함수의 설명도 링크로 남겨두니 필요하면 클릭해주세요.

 

엑셀(EXCEL)의 배수로 반올림의 기준을 설정하는 MROUND 함수로 각종 자리 맞춤하기(0.5배수로 반올림하기)

반응형

+ Recent posts