• 최초 작성일: 2002-12-24
  • 최종 수정일: 2026-09-30
  • 조회수: 8 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 선택 영역에 화살표 그리기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

Our bodies are our gardens, to the which our wills are gardeners. 신체는 우리의 정원이며, 의지는 이 정원의 정원사이다.

'모든 문제에는 해답이 있다!'는 생각을 가지고 매사에 임하는 사람이 실제로 답을 찾아 내더군요. 지금까지 경험에 견주어 보건대…

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

선택 영역에 화살표 그리기

핵심 요약: 선택 영역에 화살표 그리기

셀 서식으로는 사선만 그릴 수 있으므로, 화살표는 VBA로 선 개체를 만들어 화살촉을 지정하는 방법을 사용합니다.

  • 1단계: Application.InputBox(Type:=8)로 범위를 선택받습니다.
  • 2단계: 범위의 Left, Width, Top, RowHeight로 선의 좌표를 계산합니다.
  • 3단계: AddLine으로 선을 그리고 시작·끝 화살촉 스타일을 지정합니다.

Step 1: 어떤 질문이었을까요?

엑셀에서 색 채우기나 테두리 아이콘처럼, 셀을 선택하고 누르면 해당 셀들 안에 일제히 화살 선이 채워지게 할 수 있나요? 매크로나 애드인을 사용하지 않고도 가능한지 궁금합니다.

Step 2: 셀 서식으로 사선 그리기

화살 선은 아니고 사선이 채워지도록 할 수는 있습니다.

(1) 선을 그릴 범위를 지정하고 서식-셀 메뉴를 선택합니다. (2) 테두리 탭을 선택하고 테두리 항목에서 대각선 방향을 클릭하면 아래와 같이 사선이 그려집니다.

Step 3: 화살표를 자동으로 그리는 매크로

이 질문을 접하고 한 가지 생각나는 것이 있어 만들어 보았습니다. 아래의 버튼을 누른 다음 적당한 영역을 선택해 보세요.

Sub DrawingArrow()

    Dim rngTarget           As Range
    Dim sngLeft             As Single
    Dim sngTop              As Single
    Dim sngWidth            As Single
    On Error GoTo ET
    ' 늘 그러하듯이… 필요한 변수를 선언해 줍니다.

    Set rngTarget = Application.InputBox("화살표를 그려넣을 범위를 지정하세요", Type:=8)
    ' InputBox 메서드를 사용하여 사용자가 설정한 영역(Range)을 rngTarget 변수에 담습니다.

    With rngTarget
        sngLeft = .Left
        sngWidth = sngLeft + .Width
        sngTop = .Top + .RowHeight / 2
    End With
    ' rngTarget 영역의 왼쪽 위치, 상단 위치를 파악하여 변수에 각각 담아 둡니다.
    ' 화살표를 셀의 중간에 그리기 위해 RowHeight 속성을 반으로 나누었습니다.

    ActiveSheet.Shapes.AddLine(sngLeft, sngTop, sngWidth, sngTop).Select
    With Selection.ShapeRange.Line
        .BeginArrowheadStyle = msoArrowheadOval
        .EndArrowheadStyle = msoArrowheadTriangle
    End With
    Selection.TopLeftCell.Select
    ' 선택한 영역에 화살표를 그려주는 부분입니다.
    ' 화살표 시작 부분은 둥글게, 끝나는 부분은 삼각형으로 설정합니다.

ET:
' 실행 도중 에러가 발생한 경우에 대비한 에러 트래핑 구문입니다.

    If Err.Number <> 0 Then
        MsgBox "Error 발생 : " & Err.Number, , Err.Description
        Err.Clear
    End If

End Sub

Application.InputBox의 Type을 8로 지정하면 사용자가 마우스로 범위를 선택할 수 있습니다. 선택한 영역의 왼쪽 위치와 너비, 첫 행의 세로 중간 위치를 계산해 Shapes.AddLine으로 선을 그리고, 시작점은 원(msoArrowheadOval), 끝점은 삼각형(msoArrowheadTriangle)으로 지정했습니다.

그려지긴 하는데 항상 선택 영역의 첫번째 행에만 그려지고, 화살표의 모양새도 그렇고… 여러 가지 면에서 융통성이 없을 것입니다. 나머지 부족한 부분에 대해서는 여러분이 응용력을 발휘하여 보완해 보시기 바랍니다. 유저폼을 사용하여 사용자가 여러 가지 변화를 줄 수 있도록 사용자 입장에서 만들어 보세요. 아주 재미있지 않겠습니까? 게임이나 하면서 Time Killing 하는 것 하고는 비할 바가 아니지요.

다음 시간에…

정리 — 화살표 그리기 핵심 코드

구분 사용한 코드 역할
범위 입력 Application.InputBox(..., Type:=8) 마우스로 범위 선택
선 그리기 ActiveSheet.Shapes.AddLine 두 점을 잇는 선 생성
시작 모양 BeginArrowheadStyle = msoArrowheadOval 시작점을 원으로
끝 모양 EndArrowheadStyle = msoArrowheadTriangle 끝점을 삼각형으로
사선 채우기 서식-셀-테두리 탭 대각선 테두리 지정

자주 묻는 질문 (FAQ)

Q1. 셀 서식만으로 화살표를 채울 수 있나요?

화살표는 불가능하고, 셀 서식의 테두리 탭에서 대각선 테두리를 지정해 사선을 그리는 것까지만 가능합니다.

Q2. InputBox에서 Type:=8은 어떤 의미인가요?

Application.InputBox의 Type 인수를 8로 지정하면 입력값으로 Range 개체를 받습니다. 사용자는 마우스로 셀 범위를 선택하면 됩니다.

Q3. 화살촉 모양은 어떻게 바꾸나요?

선 개체의 Line 속성에서 BeginArrowheadStyle과 EndArrowheadStyle에 원하는 msoArrowheadStyle 상수를 지정하면 됩니다.

마치며

이 예제는 항상 선택 영역의 첫 행에만 그려지는 단순한 형태입니다. 유저폼을 활용해 사용자가 옵션을 고를 수 있도록 확장해 보시기 바랍니다.