나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 조삿갓 (choga21)

추천:  2
파일:     답변_관계잇기.xlsm (19.7KB) 조회:  4147
제목:   [RE]같은 값을 찾아서 화살표 연결선 그리는 방법
     
  방법이 있을까 싶었는데
 공부해 보니 구현이 되네요.

화살표를 그리는 것은 매크로 기록 기능을 이용하면 공부할 수 있습니다.

문제는 특정 셀의 좌표 값을 알아낼 수 있는가 하는 것.
Cells(Range) 개체의 속성 중 Left, Top, Width, Height 등의 속성을
 참조하면 됩니다. 각각 좌상단 위치, 폭(열폭), 행 높이 등을
Pixel 값으로 반환해 줍니다.

Connect 프로시저에서 상수 값들을 수정하면
 데이터의 개수나 배치 위치 등을 변경할 수 있습니다.

그리고 이 설명을 잘 응용하면 가로로 연결하게 하는 것도 가능하겠지요.
 (사실은 그게 더 쉬울 것 같네요)

초기화 루틴도 만들어 두었습니다.

Sub Connect()
     Const r1 = 2: '원 데이터가 있는 행 번호
     Const r2 = 5: '비교할 데이터가 있는 행 번호
     Const cs = 1: '데이터의 범위(왼쪽 끝 열번호)
     Const ce = 5: '데이터의 범위(오른쪽 끝 열번호)
     Dim c1 As Integer
     Dim c2 As Integer
     Dim text As String
     Dim bx As Integer
     Dim by As Integer
     Dim ex As Integer
     Dim ey As Integer
     
     For c1 = cs To ce
         text = Cells(r1, c1)
         With Cells(r1 + 1, c1)
             bx = .Left + .Width / 2
             by = .Top
         End With
         For c2 = cs To ce
             With Cells(r2, c2)
                 If .Value = text Then
                     ex = .Left + .Width / 2
                     ey = .Top
                     ActiveSheet.Shapes.AddConnector(msoConnectorStraight, bx, by, ex, ey).Select
                     Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
                     Exit For
                 End If
             End With
         Next c2
     Next c1
 End Sub

 Sub ClearConnectors()
     Dim s As Integer
     For s = ActiveSheet.Shapes.Count To 1 Step -1
         With ActiveSheet.Shapes(s)
             If .Name Like "*Connector*" Then .Delete
         End With
     Next s
 End Sub
 
[불량 게시물 신고]  
타버린나무크헉!
그다지 쓰임새가 있을만한 질문이 아니라 사실 답변이 없을꺼라 생각했는데
너무 눈물나게 감사합니다. 
아직 적용해보진 않았지만 감격에 답글부터 달아요!
거듭 감사합니다.!
08-19 (18:48)
삭제 ■신고
타버린나무확인했습니다. 잘 돼네요.
필요한곳에 잘 썻습니다.
혹시 선두께를 두꺼운거로 하려면 어찌해야하는지... ^^
08-19 (20:56)
삭제 ■신고
조삿갓VBA를 공부하시려면 매크로 기록 기능을 활용하면 됩니다.
우선 리본메뉴에 [개발도구] 탭이 보이나요? 안 보이면 파일-옵션 메뉴에서 리본메뉴를 설정하세요.

개발도구의 [매크로 기록]을 켜고, 화살표 도형 하나를 선택해서 선 두께든 색깔이든 모양(대시, 쇄선 등)이든 변경해 보고 다시 개발도구에서 [매크로기록 정지] 하신 후에 VBA 편집기를 열어보세요. Module이 새로 하나 만들어져 있을 겁니다.
08-20 (19:49)
삭제 ■신고
조삿갓다음 예시는 선색깔 검정색, 선두께 1pt, 선 모양 대시를 차례로 기록한 결과입니다.

Sub 매크로1()
'
' 매크로1 매크로
'
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorText1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
    End With
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .Weight = 1
    End With
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .DashStyle = msoLineDash
    End With
End Sub
08-20 (19:49)
삭제 ■신고
조삿갓물론 중복된 명령어나 생략해도 되는 명령어들이 많이 있지요. 영어 단어를 잘 해석해서 필요한 것만 취사선택하여 Connect 프로시저에 적당한 곳에 붙여넣기 하면 다음과 같습니다.

If .Value = text Then
    ex = .Left + .Width / 2
    ey = .Top
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, bx, by, ex, ey).Select
    With Selection.ShapeRange.Line
        .EndArrowheadStyle = msoArrowheadTriangle
        .ForeColor.ObjectThemeColor = msoThemeColorText1
        .Weight = 1
        .DashStyle = msoLineDash
    End With
    Exit For
End If
08-20 (20:00)
삭제 ■신고
타버린나무그렇군요! 
조금의 변형때문에 질문하는 일이 많이 줄겠네요
낚시하는 방법을 가르쳐주셔서 감사합니다.
08-21 (09:34)
삭제 ■신고
        
  

작성일 : 2017-08-16(12:22)
최종수정일 : 2017-08-16(12:22)
 


 ◎ 관련글

  제 목   작성자   날짜
같은 값을 찾아서 화살표 연결선 그리는 방법 타버린나무 2017-08-15
[RE]같은 값을 찾아서 화살표 연결선 그리는 방법 조삿갓 2017-08-16