EXCEL - VBA

좌표를 이용해 엑셀에 도면 위치 표시하기(1)

별동산 2023. 11. 13. 08:47
반응형

좌표를 이용해서 도면 위치 표시하기.xlsx
0.01MB

 

위와 같이 도면별 위, 경도(통상적인 위, 경도와 다르지만 그렇게 표시합니다)가 있을 때 도면에 표시하는 방법을 알아보고자 합니다.

 

1. 셀의 위치 알아내기

먼저 위치와 관련한 셀의 속성을 알아야 합니다.

셀은 왼쪽 위를 기준으로 열 너비와 행 높이를 가지고 있습니다.

 

가. 셀의 왼쪽, 위 구하기

 

① 셀의 왼쪽 위치 구하기

개발도구 - Visual Basic을 실행하고,

삽입 - 모듈 메뉴를 누르면 모듈과 Module1이 추가됩니다.

 

 

 

오른쪽 편집기 창에

sub cellinfo라고 입력하고 엔터 키를 누릅니다.

 

그리고, 왼쪽 위치는 셀 주소를 쓴 후 .left라고 하면 됩니다.

다시 말해 range("a1").left 인데

화면에서 확인해야 하므로

debug.print를 앞에 추가하면 됩니다.

 

 

debug.print는 실행 결과를 직접 실행창에 표시하기 때문에 직접 실행창에 표시하기 때문에

직접 실행창이 없다면 보기 메뉴에서 직접 실행창을 눌러 먼저 화면에 보이도록 해야 합니다.

 

이제 F5키 또는 실행에서 매크로 실행 또는 기본 도구 모음에서 오른쪽 삼각형 모양의 아이콘을 누르면 서브 프로시저가 실행되고, 직접 실행창에 0이 표시됩니다.

 

 

그러면 수정해서 C1셀의 왼쪽 위치를 구하면

Sub cellinfo()
    Debug.Print (Range("c1").Left)
End Sub​

 

148.5가 나옵니다.

 

② 셀의 위쪽 위치 구하기

셀의 위쪽의 left대신 top이라고 쓰면 됩니다.

debug.print 줄을 복사한 아래 줄에 붙여 넣고,

left를 top으로 수정하고 

Sub cellinfo()
    Debug.Print (Range("c1").Left)
    Debug.Print (Range("c1").Top)
End Sub

 

실행하면 148.5와 0이 표시됩니다.

 

Left와 마찬가지로, 0부터 엑셀 시트가 시작되는 것을 알 수 있습니다.

 

나. 셀의 높이와 너비 구하기

① 엑셀에서 메뉴로 구하기

셀의 높이와 너비는 엑셀에서 열을 나타내는 알파벳 또는 행을 나타내는 숫자에서 마우스 오른쪽 버튼을 누르면 메뉴에서 나오는 열 너비 또는 행 높이를 눌러 알 수 있습니다.

 

 

 

 

그렇게 열 너비와 행 높이를 구하면 B열의 열 너비 8.75, 3행의 행 높이는 16.5입니다.

 

역시서 8.75는 셀 안에 들어갈 수 있는 영문 대문자의 글자수이고, 행 높이는 포인트로 단위가 다릅니다.

 

영문대문자가 8.75 개가 들어갈 수 있으므로 한글로 계산하면, 4.375이고,

영문소문자로 하면 9자 정도 들어가는데 정확하지는 않습니다.

 

 

② VBA에서 구하기

엑셀 시트에서는 셀 주소를 이용해 열 너비와 행 높이를 구할 수 없지만,

VBA에서 셀 주소를 이용해

열 너비는 셀 주소.width, 행 높이는 셀 주소.height라고 입력해서 구할 수 있습니다.

 

아래와 같이 열 너비와 행 높이를 구하는 코드를 추가한 후 실행하면

Sub cellinfo()
    Debug.Print (Range("c1").Left)
    Debug.Print (Range("c1").Top)
    Debug.Print (Range("c1").Width)
    Debug.Print (Range("c1").Height)
End Sub

 

 

VBA에서는 열 너비나 행 높이 모두 포인트 단위로 표시해서

열 너비 56.25, 행 높이는 16.5로 표시됩니다.

 

 

2. 좌표를 이용해 사각형 그리기

 

B5셀에서 C8셀까지 테두리가 아니라 사각형을 색을 넣어서 그려보겠습니다.

 

가. Shapes.AddShape 메서드

도형을 추가할 때는 Shapes.AddShape 메서드를 이용합니다.

 

Shapes.AddShape 메서드의 구문은

expression.AddShape (Type, Left, Top, Width, Height)이고,

인수들의 의미는 아래와 같습니다.

이름 필수/선택 데이터 형식 설 명
Type Required MsoAutoShapeType 생성할 도형의 형태
Left Required Single 포인트 단위로 표시된 도형의 왼쪽 위 위치 중 왼쪽의 위치
Top Required Single 포인트 단위로 표시된 도형의 왼쪽 위 위치 중 위쪽의 위치
Width Required Single 포인트 단위로 표시된 도형의 너비
Height Required Single 포인트 단위로 표시된 도형의 높이

 

 

Type은 종류가 많은데, 기본 사각형은 msoShapeRectange이고,

모서리의 모양에 따라 또 여러 가지로 나뉩니다.

 

나. Shapes.AddShape 메서드

 

먼저 아래와 같이 매크로를 작성했더니

"컴파일 오류입니다. 필요한 요소 ="이라고 에러가 표시됩니다.

 

 

따라서, 바로 ActiveSheet.Shapes.AddShape로 하면 안 되고,

범위 등 설정할 때처럼 Set 다음에 변수명을 쓰고, = 도형설정 구문으로  해야 합니다.

 

따라서, 먼저 변수를 Dim shp as Shape로 설정해야 합니다.

그러면 아래와 같은 코드가 됩니다.

Sub 도형그리기()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Range("b5").Left, Range("b5").Top, Range("b5:c5").Width, Range("b5:c8").Height)
End Sub

 

 

실행하면 B5셀에서 C8셀까지 네모가 만들어집니다.

 

색을 바꿀 때는 

shp.Fill.ForeColor.RGB = RGB(255,0,0) 또는

shp.Fill.ForeColor.RGB = vbRed 또

shp.Fill.ForeColor.SchemeColor = 2라는 구문을 사용합니다.

 

Sub 도형그리기()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Range("b5").Left, Range("b5").Top, Range("b5:c5").Width, Range("b5:c8").Height)
'    shp.Fill.ForeColor.RGB = RGB(255, 0, 0)
'    shp.Fill.ForeColor.RGB = vbRed
    shp.Fill.ForeColor.SchemeColor = 2
End Sub

 

 

그리고, 실행하면 아래와 같이 도형 색이 빨간색으로 바뀝니다.

 

 

그리고, 저장하면 "매크로 제외 통합문서에 저장할 수 없다고 하면서  아니요를 클릭하고 [파일 형식] 목록에서 매크로 사용 파일 형식을 선택하십시오"라고 하므로

아니요를 누르고, 파일 형식을 .xlsm으로 바꾼 다음 저장합니다.

 

좌표를 이용해서 도면 위치 표시하기.xlsm
0.02MB

반응형