Excel VBA 기초

Excel VBA - Cell 값을 다른 Cell에 복사하기

kwangpal 2023. 11. 26. 00:11
반응형

Cell 값을 다른 Cell에 복사하기

VBA 코드를 작성하다보면

특정 Cell에 있는 값을 다른 Cell에 복사해야 하는 경우가 종종 있다.

 

가장 간단한 예로

하나의 Cell에 있는 값을 다른 Cell에 옮겨보자.

 

A1 Cell에 문자가 있는 상황에서

(숫자가 있어도 된다)

 

 

Sub Button_Click()
    [C2] = [A1]
End Sub

 

위 코드를 실행하면 다음과 같이 C2 Cell에 A1 Cell의 내용이 복사된다.

 

 

 

하나의 Cell이 아닌 범위를 복사해보자.

다음과 같이 A1~A3에 숫자가 입력된 상황에서

 

 

Sub Button_Click()
    [C2:C4] = [A1:A3]
End Sub

 

위 코드를 실행하면

C2~C4 에 A1~A3의 숫자가 복사될 것으로 예상하겠지만

아무 일도 일어나지 않는다.

다음과 같이 .Value 를 붙여야 된다.

 

Sub Button_Click()
    [C2:C4] = [A1:A3].Value
End Sub

 

하나의 Cell을 복사할 때는 .Value 가 필요없는데

2개 이상의 Cell 범위를 복사활 때는

복사하려는 범위 뒤에 .Value 를 꼭 붙여야 된다.

(.value 라고 입력하면 자동으로 Value라고 바뀐다)

그러면 다음과 같이 C2~C4 에 A1~A3의 숫자가 잘 복사된다.

 

 

 

다음과 같이 복사한 내용이 들어갈 범위 뒤에만 .Value 를 쓰면

 

Sub Button_Click()
    [C2:C4].Value = [A1:A3]
End Sub

 

아무 일도 일어나지 않는다.

 

 

양쪽 다 .Value를 쓰면

 

Sub Button_Click()
    [C2:C4].Value = [A1:A3].Value
End Sub

 

제대로 복사가 된다.

그렇지만 굳이 양쪽에 다 쓸 필요가 없으니

뒤에만 쓰면 된다.

 

 

다른 Sheet의 내용을 복사하기

모든 연산이 하나의 Sheet 안에서 다 해결되면

어떤 Sheet의 Cell이나 범위인지 입력하지 않아도 되지만

2개 이상 Sheet의 내용이 오갈 때에는 반드시 입력해야 한다.

 

다음과 같이 Sheet2에 있는 내용을 Sheet1에 복사해보자.

 

 

Sub Button_Click()
    Sheets("Sheet1").[A1:A4] = Sheets("Sheet2").[A1:A4].Value
End Sub

 

다음과 같이 복사가 잘 되었다.

 

여기서도 여러 Cell 값을 복사하니까 뒤에 .Value를 붙였지만

하나의 Cell 값을 복사하는 거라면 .Value를 안써도 된다.

 

 

Value2

.Value 대신 .Value2를 쓸 수도 있다.

 

다음과 같이 날짜 형식으로 입력된 값이 있는 상황에서

 

 

Sub Button_Click()
    [C1:C4] = [A1:A4].Value2
End Sub

 

.Value2 를 붙여서 실행하면

 

 

날짜 형식의 값이 숫자 형식의 값으로 복사된다.

이게 무슨 소용인가 싶지만 .Value보다 .Value2가 연산 속도가 더 빠르다.

 

날짜나 통화(Currency) 형식의 값보다는 숫자 형식의 값을 연산하는 것이 빠른데

.Value2 를 쓰면 숫자 형식(여기서는 Double 타입)으로 바꿔주기 때문이다.

 

간단한 작업을 할 때는 .Value나 .Value2나 별 차이가 없고

좀 복잡한 작업을 하는 경우라면 필요한 곳에 .Value2를 붙여주는 것이 낫다.

 

 

 

위 그림에서 A1~A4에는 모두 1.111 을 입력한 후

A1은 날짜, A2는 숫자, A3는 통화, A4는 백분율 형식으로 설정했다.

그리고 .Value2 를 붙여서 복사한 결과가 C1~C4에 있다.

 

.Value 를 붙여서 복사하면 다음 그림처럼 된다.

 

 

 

문자는 .Value2를 써도 그대로 복사된다.

 

 

 

Text

.Value 대신 .Text를 붙여서 복사하면

화면에 보이는 그대로를 복사한다.

 

A1 Cell에 1.111을 입력한 후 화면에 표시되는 자리수를 줄여 1.11로 보이게 했다.

 

 

그리고 다음과 같이 .Text 를 붙여서 복사하면

 

Sub Button_Click()
    [C1] = [A1].Text
End Sub

 

 

1.111 이 아니라 화면에 보이는 그대로 1.11 만 복사된다.

 

그런데 .Text 로 복사하는 것은 하나의 Cell 만 가능하다.

다음과 같이 여러 Cell 범위를 입력하면 아무 일도 일어나지 않는다.

 

Sub Button_Click()
    [C1:C4] = [A1:A4].Text
End Sub

 

 

반응형

'Excel VBA 기초' 카테고리의 다른 글

Excel VBA - 변수 (2)  (0) 2023.11.30
Excel VBA - 변수 (1)  (0) 2023.11.30
Excel VBA - Columns, Rows  (0) 2023.11.24
Excel VBA - 다중 Cell 범위 지정하기  (0) 2023.11.19
Excel VBA - 단일 Cell 지정하기  (0) 2023.11.19