아래 글에서 정해진 범위를 복사해서 정해진 영역에 붙여 넣는 매크로를 다뤄봤는데,
https://lsw3210.tistory.com/m/163
아래와 같이 A1셀부터 A5셀까지 데이터가 있는데, B1셀에 붙여 넣으려면
위 글에 의한 방식으로 하면
Range("A1:A5").Copy Destination:=Range("B1")이라고
모듈 1에 작성하면 됩니다.
모듈을 작성하려면
개발도구 - Visual Basic 명령을 누른 다음
Visual Basic Editor에서 삽입 - 모듈 메뉴를 눌러 모듈을 추가한 다음
코드 창에 아래와 같이 입력하고
Sub 복붙1()
Range("A1:A5").Copy Destination:=Range("B1")
End Sub
복붙1이라는 sub 프로시저 안에 커서를 넣은 다음, 표준 도구 모음에서 삼각형 모양의 실행(계속, F5) 아이콘을 누르면 됩니다.
그리고, 표준 도구 모음에서 엑셀 아이콘 모양을 눌러 엑셀을 열면
A1셀부터 A5셀까지의 내용이 B1셀부터 B5셀에 붙여 넣어졌습니다.
이와 같이 코딩을 하게 되면 다양한 작업을 하기 어려우므로 범위를 입력받는 방법을 사용해야 하며, 이것이 Application.InputBox 메서드입니다.
1. 구문
복붙1 서브 프로시저 아래에 복붙2라는 서브 프로시저를 sub 복붙2라고 입력하고 엔터키를 눌러 추가합니다. 엔터 키를 누르면 ()와 End Sub가 자동으로 입력됩니다.
Sub 복붙1()
Range("A1:A5").Copy Destination:=Range("B1")
End Sub
Sub 복붙2()
End Sub
복붙2 안에 application.inputbox라고 입력하고 F1키를 누르면
아래와 같이 도움말이 열립니다.
Syntax(구문)과 Parameters(인수들)이 보이고, 아래 화면에는 안 보이지만, 그 아래에 Return Value(반환 값), Remark(주석)과 Example(예제)이 있습니다.
구문은 expression.InputBox(Prompt, Title, Default, Letf, Top, HelpFile, HelpContextID, Type)라고 되어 있는데 expression은 Application 객체를 표시한다고 하므로, Application.InputBox(....)라고 사용합니다.
2. 인수 들
위 화면을 간단하게 해석하면 아래와 같습니다.
이름 | 필수여부 | 데이터 형식 | 설명 |
Prompt | 필수 | 문자열 | 대화상자에 표시되는 메시지 |
Title | 선택 | 가변형 | 입력 상자의 제목. 생략하면 기본 값은 입력입니다. |
Default | 선택 | 가변형 | 대화상자가 표시될 때 입력 칸에 표시되는 값. 생략하면 빈칸이 되는데, 범위로 지정할 수 있음 |
Left | 선택 | 가변형 | 화면의 위 왼쪽 모서리에서 왼쪽부터 떨어진 값(포인트 단위). |
Top | 선택 | 가변형 | 화면의 위 왼쪽 모서리에서 위부터 떨어진 값(포인트 단위). |
HelpFile | 선택 | 가변형 | 도움말 파일명 |
HelpContextID | 선택 | 가변형 | 도움말 파일에 있는 도움말 항목의 context ID 숫자 |
Type | 선택 | 가변형 | 반환 값의 데이터 형식을 지정하는 것인데, 생략되면 문장이 반환됩니다. |
3. Type의 유형
위 인수 중 Type에 값을 입력해서 입력받는 유형을 지정할 수 있으며, 여러 가지를 입력받으려면 1+2 식으로 입력합니다. 범위를 입력받으려면 8을 입력합니다.
값 | 설명 |
0 | 수식 |
1 | 숫자 |
2 | 문장(문자열) |
4 | 논리값 (True or False) |
8 | 범위 |
16 | #N/A과 같은 에러 값 |
64 | 값의 배열 |
4. 예제
복사할 범위와 붙여 넣을 범위를 입력받는 것을 해보겠습니다.
범위를 변수로 지정할 때는 Set 변수명 = Range("A1:A5")라고 사용합니다.
따라서, InputBox를 이용할 때도
Set CopyRange = Application.InputBox("복사할 범위를 선택하세요", Type:=8)이라고 입력합니다.
첫 번째 인수는 prompt가 맞으므로 Prompt:="복사할 범위를 선택하세요"라고 할 필요 없이 메시지만 입력하면 되는데, Type은 8번째 인수이므로 두 번째 위치에 입력할 때는 := 다음에 값을 입력해야 합니다.
이와 같이 붙여 넣을 범위로 Application.InputBox를 이용해서 지정하면 아래와 같습니다.
Sub 복붙2()
Dim CopyRange As Range, PasteRange As Range
Set CopyRange = Application.InputBox("복사할 범위를 입력하세요", Type:=8)
Set PasteRange = Application.InputBox("붙여넣을 범위를 입력하세요", Type:=8)
CopyRange.Copy Destination:=PasteRange
End Sub
위와 같이 복붙2 서브 프러시저를 만든 다음 엑셀 아이콘을 눌러 엑셀로 돌아갑니다.
그리고, 개발도구 - 매크로를 누른 다음 매크로 이름 목록에서 복붙2를 더블 클릭하거나 클릭한 다음 오른쪽 실행 버튼을 누르면
창 제목은 입력이고, '복사할 범위를 입력하세요'란 메시지, 설명이 표시되고, 아래에는 확인과 취소 버튼이 있습니다.
복사할 범위로 A1셀부터 B5셀까지 마우스로 끌면 복사할 범위로 $A$1:$B$5가 입력됩니다. 확인 버튼을 누르면
이번에는 '붙여넣을 범위를 입력하세요'라고 합니다. A7셀을 클릭하면 $A$7이 입력됩니다. 확인 버튼을 누르면
A1셀에서 B5셀까지가 A7셀에 붙여집니다.
이제 자유자재로 복사할 범위와 붙여 넣을 범위를 지정할 수 있게 되었습니다.
매크로가 포함된 엑셀 파일은 '매크로 제외 통합 문서에 저장할 수 없다고 하면서 예, 아니요를 묻는데, 아니요를 선택하고
매크로 사용 통합 문서 xlsm 형식을 선택하고 저장해야 합니다.
'EXCEL - VBA' 카테고리의 다른 글
엑셀 VBA에서 셀 또는 범위 지정하기(1) - Range (0) | 2022.10.25 |
---|---|
범위 등을 입력받는 Application.InputBox 메소드(2) (0) | 2022.10.21 |
매크로 기록으로 엑셀 VBA의 내부를 보다 (0) | 2022.10.17 |
엑셀의 유용함, 사용자 지정 함수 (2) | 2022.10.07 |
엑셀의 표를 티스토리의 표로 변환하는 매크로(4) - 셀 병합2 (1) | 2022.10.01 |