엑셀 / VBA / 매크로 만들고 실행하기

엑셀 매크로는 Visual Basic 편집기의 표준 모듈에 VBA 코드를 작성하고 Alt+F8에서 선택해 실행할 수 있습니다. 아래 예제는 지정한 시트의 A1 셀에 HELLO를 입력합니다. 기존 셀 값이 덮어써지므로 빈 연습 파일이나 복사본에서 진행하세요.

메뉴 경로와 단축키는 Windows용 데스크톱 Excel 기준입니다. 버전과 리본 메뉴 구성에 따라 이름·위치가 다를 수 있습니다.

실행 전 준비

VBA(Visual Basic for Applications)는 Office 작업을 자동화하는 프로그래밍 언어입니다. [개발 도구] 탭이 없다면 리본에 개발 도구 추가하기를 먼저 참고합니다. 웹용 Excel에서는 이 데스크톱 VBA 예제를 실행할 수 없습니다.

VBA 작업은 일반적인 Ctrl+Z로 되돌릴 수 있다고 가정하지 않습니다. 연습할 시트와 대상 셀을 확인하고 실행 전 파일을 별도로 저장합니다. 다른 사람이 준 매크로는 출처뿐 아니라 실제 코드의 동작도 확인하세요.

기능과 적용 제품은 Microsoft의 매크로 실행 안내, Microsoft의 매크로 보안 설정 안내, Microsoft의 ThisWorkbook 설명에서 확인할 수 있습니다.

표준 모듈 만들기

  1. [개발 도구] → [Visual Basic]을 누르거나 Alt+F11을 누릅니다.

[개발 도구] → [Visual Basic]을 누르거나 Alt+F11을 누릅니다.

Visual Basic 편집기에서 현재 연습 파일의 프로젝트를 찾습니다. 여러 파일을 열었다면 다른 통합 문서의 프로젝트에 코드를 넣지 않도록 파일 이름을 확인합니다.

Visual Basic 편집기에서 현재 연습 파일의 프로젝트를 찾습니다. 여러 파일을 열었다면 다른 통합 문서의 프로젝트에 코드를 넣지 않도록 파일 이름을 확인합니다.

  1. 해당 프로젝트를 선택하고 [삽입] → [모듈]을 누릅니다. 프로젝트 탐색기에서 마우스 오른쪽 버튼으로 같은 명령을 선택할 수도 있습니다.

해당 프로젝트를 선택하고 [삽입] → [모듈]을 누릅니다. 프로젝트 탐색기에서 마우스 오른쪽 버튼으로 같은 명령을 선택할 수도 있습니다.

새 모듈의 코드 창을 엽니다. 여기서는 시트 이벤트 코드 창이 아니라 [모듈] 아래의 표준 모듈을 사용합니다.

새 모듈의 코드 창을 엽니다. 여기서는 시트 이벤트 코드 창이 아니라 [모듈] 아래의 표준 모듈을 사용합니다.

A1 셀에 HELLO 입력하기

Sub SayHello()
    Sheet1.Range("A1").Value = "HELLO"
End Sub
  1. 위 코드를 모듈에 입력합니다. SayHello는 매크로 이름이고 Range("A1")은 값을 입력할 대상 셀입니다. 따옴표는 문자열을 표시하는 일반적인 큰따옴표를 사용합니다.

위 코드를 모듈에 입력합니다. SayHello는 매크로 이름이고 Range("A1")은 값을 입력할 대상 셀입니다. 따옴표는 문자열을 표시하는 일반적인 큰따옴표를 사용합니다.

Sheet1은 시트 탭의 표시 이름이 아니라 VBA의 코드 이름입니다. 프로젝트 탐색기에 Sheet1(시트1)처럼 표시되면 앞의 Sheet1을 뜻합니다. 코드 이름이 다르면 예제의 Sheet1을 해당 이름으로 바꾸어야 합니다.

탭 이름으로 지정하려면 ThisWorkbook.Worksheets("자료").Range("A1").Value = "HELLO"처럼 쓸 수 있습니다. 이 경우 실제 탭 이름이 ‘자료’여야 하며 ThisWorkbook은 코드를 저장한 통합 문서입니다. 활성 파일과 항상 같은 것은 아닙니다.

  1. 편집기에서 엑셀로 돌아가 [개발 도구] → [매크로]를 누르거나 Alt+F8을 누릅니다.

편집기에서 엑셀로 돌아가 [개발 도구] → [매크로]를 누르거나 Alt+F8을 누릅니다.

  1. 목록의 SayHello를 선택하고 [실행]을 누릅니다. 실행 전 A1에 보존할 값이 없는지 다시 확인합니다.

목록의 SayHello를 선택하고 [실행]을 누릅니다. 실행 전 A1에 보존할 값이 없는지 다시 확인합니다.

대상 시트의 A1에 HELLO가 입력되었는지 확인합니다. 다른 시트가 보이는 상태여도 코드는 지정된 시트에 값을 씁니다.

대상 시트의 A1에 HELLO가 입력되었는지 확인합니다. 다른 시트가 보이는 상태여도 코드는 지정된 시트에 값을 씁니다.

여러 셀로 대상 변경하기

Sub SayHello()
    Sheet1.Range("A1:A10").Value = "HELLO"
End Sub
  1. 기존 매크로에서 Range의 주소를 A1:A10으로 바꿉니다. 같은 이름의 Sub를 두 개 추가하지 말고 기존 프로시저의 내용만 수정합니다.

기존 매크로에서 Range의 주소를 A1:A10으로 바꿉니다. 같은 이름의 Sub를 두 개 추가하지 말고 기존 프로시저의 내용만 수정합니다.

다시 실행하면 A1부터 A10까지 각 셀에 같은 문구가 입력됩니다. 범위를 넓히면 그 범위의 기존 수식과 값도 바뀌므로 대상 주소를 반드시 확인하세요.

다시 실행하면 A1부터 A10까지 각 셀에 같은 문구가 입력됩니다. 범위를 넓히면 그 범위의 기존 수식과 값도 바뀌므로 대상 주소를 반드시 확인하세요.

매크로를 포함해 저장하기

  1. [다른 이름으로 저장]에서 [Excel 매크로 사용 통합 문서(*.xlsm)]를 선택합니다. .xlsx로 저장하면 VBA를 보존할 수 없습니다.

[다른 이름으로 저장]에서 [Excel 매크로 사용 통합 문서(*.xlsm)]를 선택합니다. .xlsx로 저장하면 VBA를 보존할 수 없습니다.

저장한 뒤 파일을 다시 열어 코드가 남아 있는지 확인합니다. 매크로 목록에 보이지 않으면 올바른 프로젝트의 표준 모듈에 매개변수 없는 Sub로 작성했는지 확인하고, 컴파일 오류와 보안 차단을 구분해 점검합니다. 보안 경고가 나타났다는 이유만으로 신뢰 여부를 확인하지 않은 코드를 허용하지 마세요.

같은 카테고리의 다른 글
엑셀 / 셀 안에서 강제 줄바꿈하는 방법

엑셀 / 셀 안에서 강제 줄바꿈하는 방법

Alt+Enter로 셀 안에 줄바꿈을 넣고 표시·행 높이를 조절합니다. 자동 줄 바꿈과 실제 줄바꿈의 차이, 수식에서 생성·제거하는 방법도 설명합니다.

엑셀 / 함수 / REPLACE, REPLACEB / 특정 위치의 문자열을 바꾸는 함수

엑셀 / 함수 / REPLACE, REPLACEB / 특정 위치의 문자열을 바꾸는 함수

REPLACE로 위치와 문자 수를 지정해 문자열을 바꾸는 방법을 설명합니다. SUBSTITUTE와의 차이, REPLACEB의 호환성 및 개인정보 표시의 한계를 다룹니다.

엑셀 / 함수 / DAYS / 두 날짜 사이의 일수를 계산하는 함수

엑셀 / 함수 / DAYS / 두 날짜 사이의 일수를 계산하는 함수

DAYS의 종료일·시작일 순서와 날짜 차이 계산을 설명합니다. 양끝 날짜 포함 여부, 실제 날짜 값과 업무일 계산의 차이도 확인할 수 있습니다.

엑셀 / 행의 최대 개수, 열의 최대 개수, 셀의 최대 개수

엑셀 / 행의 최대 개수, 열의 최대 개수, 셀의 최대 개수

현대 Excel 워크시트의 행·열·셀 수와 마지막 셀 주소를 설명합니다. .xls의 제한과 실제 처리 용량·숫자 정밀도는 별도 조건임을 안내합니다.

엑셀 / 함수 / EXACT / 두 텍스트(문자열)이 같은지 비교하는 함수

엑셀 / 함수 / EXACT / 두 텍스트(문자열)이 같은지 비교하는 함수

EXACT로 두 문자열을 대소문자까지 정확하게 비교하는 방법을 설명합니다. 공백과 셀 서식의 영향, IF와 결합한 검증 예제도 다룹니다.

엑셀 / 워크시트 이름 바꾸는 방법, 탭 색 변경하는 방법

엑셀 / 워크시트 이름 바꾸는 방법, 탭 색 변경하는 방법

시트 탭에서 이름과 색을 바꾸는 방법을 설명합니다. 이름의 금지 문자·길이, 중복과 외부 참조·매크로 영향을 확인하는 과정도 다룹니다.

엑셀 / 피벗 테이블 / 여러 범위로 다중 피벗 테이블 만드는 방법

엑셀 / 피벗 테이블 / 여러 범위로 다중 피벗 테이블 만드는 방법

기존 다중 통합 범위 피벗 마법사로 여러 요약 범위를 합치는 방법을 설명합니다. 필드 분석의 한계·범위 추가·새로 고침과 Power Query 대안도 다룹니다.

엑셀 / 함수 / ISBLANK / 빈 셀인지 확인하는 함수

엑셀 / 함수 / ISBLANK / 빈 셀인지 확인하는 함수

ISBLANK로 실제 빈 셀을 검사하고 IF와 결합하는 방법을 설명합니다. 빈 문자열을 반환하는 수식, 공백 문자와 빈 셀의 차이를 구분할 수 있습니다.

엑셀 / 페이지 나누는 점선 없애는 방법

엑셀 / 페이지 나누는 점선 없애는 방법

페이지 나누기 점선을 숨기는 Excel 옵션과 복원 방법을 설명합니다. 표시 숨김, 수동 페이지 나누기 삭제와 실제 인쇄 배치 변경을 구분합니다.

엑셀 / 함수 / XIRR / 비정기적인 현금 흐름의 내부수익률 계산하는 함수

엑셀 / 함수 / XIRR / 비정기적인 현금 흐름의 내부수익률 계산하는 함수

XIRR의 금액·날짜 범위를 맞추고 연 단위 내부수익률을 계산하는 방법을 안내합니다. IRR과 다른 점, 날짜 오류와 추정값의 한계도 설명합니다.