전 국민 코딩 시대 엑셀 VBA 기초 4 - VBA에서 엑셀로 결과 보내기(Range, Cells, Object)

Описание к видео 전 국민 코딩 시대 엑셀 VBA 기초 4 - VBA에서 엑셀로 결과 보내기(Range, Cells, Object)

전 국민 코딩 시대 엑셀 VBA 기초 4 - VBA에서 엑셀로 결과 보내기(Range, Cells, Object)

VBA에서 엑셀로 결과 보내는 방법에 대해 알아보겠습니다.

오늘 다룰 내용은 개체(Object)인데,

VBA Editor에서 F2키를 클릭하여 "개체 찾아보기"에서 VBA의 모든 개체를 검색할 수 있으며, Worksheets 개체를 선택하면 우측 창에 "Worksheets"의 구성원을 볼 수 있습니다.

모든 라이브러리의 검색창에 Worksheets를 입력 후 우측의 "망원경" 아이콘을 클릭하면 "라이브러리, 클래스, 구성원"을 볼 수 있고, 여기서 "Worksheets"를 클릭하면 하단 우측 창에서 "Worksheets" 구성원을 확인할 수 있습니다.

모든 라이브러리 의 검색창에 "Sheet"를 입력 후 우측의 "망원경" 아이콘을 클릭하면 "라이브러리, 클래스, 구성원"을 볼 수 있고, 여기서 "Sheet1"을 클릭하면 하단 우측 창에서 "Sheet1" 구성원을 확인할 수 있으며, 이 구성원들을 메서드라고 합니다.

VBA구성

1. 개체(Object)
개체는 아래의 그림과 같이 "Application(엑셀) → Workvook(엑셀 통합파일) → WorkSheet(Sheet)"의 개념입니다.

개체(Object)는 엑셀 통합문서와 통합 문서를 구성하는 워크시트를 의미하고, "Set"으로 개체 변수에 개체(Object)의 값을 할당합니다.

2. 개체(Object) 선언
개체(Object)는 변수와 마찬가지로 Dim에서 선언합니다.

3. 개체(Object) 할당​
Set으로 개체 변수에 개체(Object)의 값을 할당합니다.

아래의 VBA 코드에서 "Dim This_Sheet As Worksheet"에서 "This_Sheet"는 "Worksheet" 개체 변수입니다.

따라서 "This_Sheet"에 "Set This_Sheet = Sheet1"와 같이 Sheet를 할당 할 수 있습니다.

"Let Pay_Roll = 5000000"에서 서 Let 은 좌측의 변수에 우측의 상수를 할당(대입) 하라는 명령어이지만, "Sname_Name = "앤드류""와 같이 Let 을 사용하지 않아도 VBA는 Let 을 사용한 것으로 간주합니다.
' 변수와 Object 선언
Dim This_Sheet As Worksheet
Dim Pay_Roll As Long
Dim Sname_Name As String
Set This_Sheet = Sheet1
Let Pay_Roll = 5000000
Sname_Name = "앤드류"
Debug.Print "Pay_Roll="; Pay_Roll, "Sname_Name="; Sname_Name


VBA 결과를 엑셀 시트로 보내기

앞에서 개체(Object)를 설명한 것은 엑셀 시트(Sheet)를 사용하기 위함입니다.
VBA 프로젝트 창에 현재 통합문서(Worksheet)와 "Sheet1, Sheet2, Sheet3"3개의 Sheet가 엑셀 개체이며 이것들은,

엑셀 워크시트 하단에 "Sheet1, Sheet2, Sheet3"3개의 시트를 의미합니다.

1. 메서드
메서드의 의미는 클래스 또는 개체와 연결 연결하여 사용하는 함수로 이해하면 되겠습니다.

VBA Module 창에서 "This_Sheet."까지 입력하면 메서드 선택 창이 나오고,
여기서 원하는 메서드를 선택할 수 있습니다.

2. Cells
엑셀 시트의 셀을 지정하는 메서드로 Cells은 범위를 지정하여 선택할 수 없고 하나의 셀만 선택 할 수 있습니다.

예를 들어 Max(범위 1:범위 2), Sum(범위 1:범위 2)과 같은 범위를 지정할 수 없기 때문에 이와 같이 셀의 범위를 지정하여 사용하여야 할 경우는 뒤에서 다룰 "Range:를 사용합니다.

Cells는 "개체. 메서드(행, 열)"과 같이 사용합니다.
따라서 "This_Sheet.Cells(3, "A") = 1"은 엑셀 "Sheet1"의 3행 A열로 숫자 1을 보내게 됩니다.

엑셀 Sheet1을 선택 후
[ Cells(3, "A") = 1 : Cells(3, "B") = Sname_Name : Cells(3, "C") = Pay_Roll ]와 같이 코드를 작성하여 실행한다면
Sub Object_Test()
' 변수와 Object 선언
Dim This_Sheet As Worksheet
Dim Pay_Roll As Long
Dim Sname_Name As String
Set This_Sheet = Sheet1
Let Pay_Roll = 5000000
Sname_Name = "앤드류"
Cells(3, "A") = 1
Cells(3, "B") = Sname_Name
Cells(3, "C") = Pay_Roll
End Sub

엑셀 Sheet1에 VBA에서 실행한 값이 전달됩니다.

그러면 엑셀 시트를 "Sheet2"를 선택 후 VBA 코드를 실행하면? 역시 "Sheet2"에 VBA 코드의 결괏값이 붙게 됩니다.


당연히 엑셀 시트를 "Sheet3"을 선택 후 VBA 코드를 실행하면 "Sheet3"에 VBA 코드의 결괏값이 붙게 되겠죠?

내가 원하는 결과는 Sheet1에 나와야 한다면?
개체(Object)를 붙여 주는 겁니다.
[Cells(3, "A") = 1]에 개체 "This_Sheet1."을 붙여 [This_Sheet1.Cells(3, "A") = 1] 주면,
"Sheet1"에서만 결과를 확인할 수 있습니다.
This_Sheet.Cells(3, "A") = 1
This_Sheet.Cells(3, "B") = Sname_Name
This_Sheet.Cells(3, "C") = Pay_Roll

2. 레인지(Range)

가. 단일범위 지정
레인지(Range)도 Cells와 마찬가지로 엑셀 시트의 위치를 지정합니다.

Range는 "개체. 메서드(열 & 행)"과 같이 사용합니다.
따라서 "This_Sheet.Range("A" & 4) = 1"은 엑셀 "Sheet1"의 4행 A열로 숫자 1을 보내게 됩니다.

아래의 레인지(Range)로 지정한 엑셀 시트에 결과가 보이게 됩니다.
This_Sheet.Range("A" & 4) = 2
This_Sheet.Range("B" & 4) = Sname_Name
This_Sheet.Range("C" & 4) = Pay_Roll

나. 범위 설정
레인지(Range)는 범위를 설정할 수 있습니다.
[ This_Sheet.Range("A3:C4").Clear ]에서 "A3:C4"은 엑셀 시트의 A3부터 C4까지 시트의 내용을 Clear 시킵니다.

참고로, Clear는 엑셀 시트에 지정된 범위 내의 셀 서식과 수식을 포함하여 전부 지워지게 합니다.
===============================
참고 : 네이버 블로그 -

전 국민 코딩 시대 엑셀 VBA 기초 4 - VBA에서 엑셀로 결과 보내기(Range, Cell)
https://blog.naver.com/jxbjultd/22343...

Комментарии

Информация по комментариям в разработке