EXCEL - VBA

범위 등을 입력받는 Application.InputBox 메소드(1)

별동산 2022. 10. 20. 08:22
반응형

아래 글에서 정해진 범위를 복사해서 정해진 영역에 붙여 넣는 매크로를 다뤄봤는데,

https://lsw3210.tistory.com/m/163

 

아래와 같이 A1셀부터 A5셀까지 데이터가 있는데, B1셀에 붙여 넣으려면

엑셀 예제
복사하여붙여넣기(vba).xlsx
0.01MB

 

위 글에 의한 방식으로 하면 

Range("A1:A5").Copy Destination:=Range("B1")이라고

모듈 1에 작성하면 됩니다.

 

모듈을 작성하려면

개발도구 - Visual Basic 명령을 누른 다음

Visual Basic Editor에서 삽입 - 모듈 메뉴를 눌러 모듈을 추가한 다음

코드 창에 아래와 같이 입력하고

Sub 복붙1()
    Range("A1:A5").Copy Destination:=Range("B1")
End Sub

vba 복사하여 붙여넣기 매크로

 

복붙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키를 누르면

application.inputbox, F1 도움말

 

아래와 같이 도움말이 열립니다.

Syntax(구문)과 Parameters(인수들)이 보이고, 아래 화면에는 안 보이지만, 그 아래에 Return Value(반환 값), Remark(주석)과 Example(예제)이 있습니다.

Application.InputBox method 도움말

 

구문은 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가 입력됩니다. 확인 버튼을 누르면

범위 입력 화면1

 

이번에는 '붙여넣을 범위를 입력하세요'라고 합니다. A7셀을 클릭하면 $A$7이 입력됩니다. 확인 버튼을 누르면

 

범위 입력 화면2

 

A1셀에서 B5셀까지가 A7셀에 붙여집니다.

복사하여 붙여넣기 결과

 

이제 자유자재로 복사할 범위와 붙여 넣을 범위를 지정할 수 있게 되었습니다.

 

매크로가 포함된 엑셀 파일은 '매크로 제외 통합 문서에 저장할 수 없다고 하면서 예, 아니요를 묻는데, 아니요를 선택하고

매크로 제외 통합문서에 저장 불가 대화상자

 

매크로 사용 통합 문서 xlsm 형식을 선택하고 저장해야 합니다.

매크로 사용 통합문서 형식으로 저장

 

복사하여붙여넣기(vba).xlsm
0.01MB

반응형