• 최초 작성일: 2008-06-03
  • 최종 수정일: 2008-06-03
  • 조회수: 70,470 회
  • 작성자: 엑셀러 권현욱
  • 강의 제목: 분산형 차트에 레이블을 표시하는 몇 가지 방법

엑셀러 권현욱

들어가기 전에

미국 클린턴 정부 시절에 노동부 장관을 역임한 로버트 라이시(무섭게 생긴 콘돌리자 라이스 말고... 저는 이 두 사람 이름이 늘 헷갈리더군요. 외모상으로는 혼돈할래야 할 수가 없는 캐릭터인데 말이죠. ^^)가 쓴 <부유한 노예>라는 책에 이런 내용이 있었습니다.

우리 이웃집에는 위성 안테나가 설치되어 있는데, 이 안테나를 통해서 1500개의 TV 채널을 볼 수 있다고 한다. 어떤 채널이 있는지 알아보는 데에만 며칠이 걸릴 것이고, 실제 TV 시청 시간보다는 방송 시간표 보는 시간이 분명 많을테니 말이다. 그래도 안테나를 설치했다는 사실만으로도 기뻐하고 좋아한다.

아주 오래 전에 본 4컷짜리 만화가 오버래핑 되어 떠올랐습니다. 한 20년쯤 전 한겨레신문이었던 것으로 기억합니다만 상황은 오늘날에도 여전히 유효한 것 같습니다. 만화를 그릴 수는 없고 상황을 대충 설명하자면 대략 이렇습니다.

#장면 1: 원시인 K
1일 노동시간: 4시간
1일 수면시간: 18시간
주거면적: 측정불가
배우자: 12명
취미: 사냥
두려운 것: 천둥
치명적 질환: 골절상
행복지수: 100점
#장면 2: 조선시대 K초시
1일 노동시간: 7시간
1일 수면시간: 10시간
주거면적: 100평
배우자: 4명
취미: 독서
두려운 것: 조상님
치명적 질환: 종기
행복지수: 85점
#장면 3: 현대인 K
1일 노동시간: 12시간
1일 수면시간: 6시간
주거면적: 25평
배우자: 1명
취미: TV시청
두려운 것: 아내
치명적 질환: 암, 에이즈
행복지수: 30점

마지막 장면에서 행복지수가 30점 밖에 안되는 현대인K씨는 이렇게 생각합니다.

'옛날엔 TV가 없어서 무척 심심했을거야. 상상만해도 끔찍하군! 어떻게 살았나 몰라.'

성공, 그리고 행복의 진정한 의미와 척도는 무엇일까요.

로버트 라이시, 그의 용기가 새삼 부럽습니다.



지난 X0461 강의에서 분산형 차트에 레이블을 표시하는 방법 한 가지를 소개해 드렸습니다. 이것과 관련하여 몇 건의 질문 메일이 온 것으로 보아 아마도 여러 가지 경우에 두루 적용될 수 있나 봅니다. 해서 분산형 차트에 레이블을 표시하는 방법들에 대해 정리를 해 보고자 합니다.

노동집약적(?)인 방법

이 방법은 지난 X0461 강의에서 소개해 드린 방법입니다. 자세한 사항은 해당 강좌를 참고하시기 바라며, 여기서는 전반적인 순서에 대해서만 간단하게 설명드립니다.

  • 매출액과 경상이익 데이터에서 매출액 데이터에 사용자 지정 서식을 지정하여 차트에 표시할 문자열 형태가 되도록 합니다.
  • 분산형 차트(표식만 있는 분산형)를 작성한 다음, 차트의 X축 서식을 변경합니다.
  • [닫기] 버튼을 클릭합니다. 차트 계열을 마우스 오른쪽 버튼으로 클릭하고 [데이터 레이블 추가] 메뉴를 선택하여 경상이익 금액이 표시되도록 합니다.
  • 데이터 레이블을 마우스 오른쪽 버튼으로 클릭하고 [데이터 레이블 서식] 메뉴를 선택합니다. 대화상자가 나타나면 [레이블 옵션] - 'X 값' 항목을 클릭하여 체크 표시가 나타나도록 하고 [닫기] 버튼을 누릅니다.

기억이 새록새록 나시지요?(아침에 무슨 반찬이 나왔는지도 가물가물한데 장난치지 말라구요? 알겠나이다! ^^;) 기억이 안나는 분은 아래 강의 내용을 살펴보세요.

여전히 노동집약적이나 계열수가 적을 때 쓸만한 방법

앞에서 소개한 것보다는 조금 간단해 보이는 방법입니다. 차트의 계열이 적은 경우(10 ~ 15개 정도?)이면서 And VBA를 모를 경우 호구지책... 아니지... 궁여지책으로 그런대로 쓸만한 방법인 듯 합니다.

1. C4:D11 영역의 데이터를 선택하고 [표식만 있는 분산형] 차트를 작성합니다. 그런 다음 차트의 각종 서식을 적당히 손질(?)하여 그림과 같은 차트 형태를 만듭니다.

로딩 중...

2. 임의의 계열을 마우스 오른쪽 버튼으로 클릭한 다음 [데이터 레이블 추가] 메뉴를 선택하면 각 계열의 레이블이 나타납니다.

3. 레이블 하나를 클릭하면 전체 레이블이 선택됩니다. 이 상태에서 임의의 레이블을 사알~짝 눌러보면 계열 중 하나만 선택됩니다(어째 표현이 어설픈데, 하여튼 잘 선택하시리라 믿고).

4. 아래 그림처럼 '350'을 선택하고 수식 입력줄에 등호(=)를 입력합니다. 이것은 강동지점의 경상이익 금액이므로 B4 셀을 클릭합니다.

로딩 중...

5. 키를 누르면 '350'이라는 값 대신 '강동'이라는 지점명이 표시됩니다. 같은 방법으로 나머지 값들을 지점으로 대체합니다.

VBA를 이용하는 방법

데이터의 계열이 많거나 이런 류의 작업을 빈번히 해야 하는 경우라면 VBA를 사용하여 자동화 할 수 있습니다.

1. 표 내부의 셀을 하나 선택하고 [삽입] 탭 - [표] 그룹 - [표] 명령을 클릭합니다.

2. [표 만들기] 대화상자가 나타납니다. 범위(B2:D11)가 제대로 지정되었는지 본 다음 [확인] 버튼을 클릭합니다.

3. B4:B11 영역을 선택하고 '지점명'이라는 이름을 정의합니다. 이름 정의를 어떻게 하냐고요??(허허, 큰일인데... ^^;) 워크시트 좌측 상단의 [이름 상자]에 '지점명'이라고 입력하고 ENTER 키를 누르세요). 표를 만든 다음 이름 정의를 하면 데이터를 추가하거나 삭제할 경우, 범위도 자동으로 변하므로 아주 편리합니다. 먼 소리냐구요? 광주 지점 밑에 제주 지점을 추가한 다음 [이름 상자]에서 '지점명'을 선택해 보세요.

엑셀 2002 이전 버전인 경우에는 데이터 추가/삭제에 따라 범위를 유동적으로 변하게 하려면 동적 이름 정의 Dynamic Naming를 이용해야 합니다.

1) [수식] 탭 - [정의된 이름] 그룹 - [이름 관리자] 명령을 클릭합니다.
2) [이름 관리자] 대화상자에서 [새로 만들기] 버튼을 클릭하고 다음과 같이 이름 정의 합니다.
로딩 중...

4. VB Editor에서(ALT + F11) 모듈을 하나 삽입하고 다음과 같은 코드를 작성합니다. 예제 파일에도 복사해 두었습니다(친절하게도 ^^).

Sub DisplayLabel()
  Dim rngBranch As Range
  Dim chtMyChart As Chart
  Dim i As Integer
  Dim intBranch As Integer

  Set chtMyChart = ActiveSheet.ChartObjects(1).Chart
  On Error Resume Next
  Set rngBranch = Range("지점명")

  chtMyChart.SeriesCollection(1).ApplyDataLabels Type:=xlDataLabelsShowValue, _
      AutoText:=True
  intBranch = chtMyChart.SeriesCollection(1).Points.Count

  For i = 1 To intBranch
      With chtMyChart.SeriesCollection(1).Points(i)
          .HasDataLabel = True
          With .DataLabel
              .Text = rngBranch.Cells(i)
              .Font.Size = 10
              .Font.Name = "굴림"
          End With
      End With
  Next i
End Sub

CODE

5. 차트에 표시된 레이블을 지우는 코드는 다음과 같습니다.

Sub DelDataLabel()
  Dim chtMyChart As Chart
  Set chtMyChart = ActiveSheet.ChartObjects(2).Chart

  chtMyChart.SeriesCollection(1).HasDataLabels = False
End Sub

CODE

이런 정도의 방법이 떠오릅니다. 이것 이외의 또 다른 좋은 방법을 알고 계신 분은 알려주세요.