엑셀 / VBA / 여러 시트의 내용을 하나의 시트에 모으는 방법

동일한 형식에 내용만 다른 여러 시트의 데이터를 하나로 합치는 방법을 알아본다.

예를 들어 다음과 같은 엑셀 문서가 있다고 하자. 첫 번째 시트는 합쳐진 데이터가 모일 시트이고, 나머지 세 개는 데이터가 있는 시트이다.

[개발 도구]의 [Visual Basic]을 클릭한다.(만약 개발 도구 메뉴가 없다면 여기의 안내대로 개발 도구를 추가한다.)

[삽입]의 [모듈]을 클릭한다.

다음과 같이 코드를 입력한다.

Sub Merge()

    Sheets(1).Activate '첫 번째 시트로 이동
    ActiveSheet.Range("A1").CurrentRegion.Select '값이 있는 셀 선택
    Selection.Delete '선택한 셀 삭제

    Sheets(2).Activate '두 번째 시트로 이동
    ActiveSheet.Range("A1").CurrentRegion.Select '값이 있는 셀 선택
    Selection.Copy Destination:=Sheets(1).Range("A1") '첫 번째 시트에 붙여넣기
    ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select '값이 있는 다음 행 첫 번째 셀 선택

    Dim I As Integer
    For I = 3 To 4
        Sheets(I).Activate 'I 번째 시트로 이동
        ActiveSheet.Range("A1").CurrentRegion.Select '값이 있는 셀 선택
        Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select '선택에서 1행 제외
        Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2) '첫 번째 시트에 붙여넣기
        ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select '값이 있는 다음 행 첫 번째 셀 선택
    Next
    
    Sheets(1).Activate '첫 번째 시트로 이동
    ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select '값이 있는 다음 행 첫 번째 셀 선택
    
End Sub

다음의 순서로 작업하는 코드이다.

  1. 첫 번째 시트를 선택하고 내용을 지운다.
  2. 두 번째 시트의 내용을 복사하여 첫 번째 시트에 붙여넣는다.
  3. 나머지 시트의 내용을 복사하여 첫 번째 시트에 붙여넣는다.

두 번째 시트에 대한 코드와 나머지 시트에 대한 코드가 다른 이유는 머리글 때문이다.

이제 [개발 도구]의 [매크로]를 클릭한다. 단축키는 Alt+F8이다.

Merge를 선택하고 [실행]을 클릭한다.

다음처럼 첫 번째 시트에 데이터가 다 모인다.

같은 카테고리의 다른 글
엑셀 / 함수 / TRIM / 공백 제거하는 함수

엑셀 / 함수 / TRIM / 공백 제거하는 함수

개요 TRIM은 문자열에 있는 공백을 제거하는 함수이다. 문자열 양 끝에 있는 공백은 다 제거한다. 문자열 사이에 있는 공백은 하나만 남기고 제거한다. 구문 TRIM(text) 예제 =TRIM(" AB CD ") AB, CD 양 끝과 사이에 한 개의 공백이 있으면, 양 끝의 공백은 제거하고, 사이에 있는 것은 그대로 둔다. =TRIM(" AB CD ") AB, CD 양 끝과 사이에 두 개의 공백이 있으면, 양 ...

엑셀 / 화면 확대, 축소 하는 방법

엑셀 / 화면 확대, 축소 하는 방법

화면 확대/축소 엑셀의 기본 글자 크기는 보통 11pt입니다. 대부분 그 크기에 익숙해져있지만, 좀 더 크게 또는 좀 더 작게 보는 게 편할 때가 있습니다. 글자 크기를 변경하는 방법도 있지만, 다른 사람과 자료를 공유해야 하거나, 프린터로 인쇄해야 하는 경우에는, 글자 크기는 그대로 둔 채 화면만 확대/축소하는 게 좋습니다. 화면을 확대/축소하는 방법 두 가지를 소개해드립니다. 방법 ...

엑셀 / 함수 / IRR / 내부수익률 계산하는 함수

엑셀 / 함수 / IRR / 내부수익률 계산하는 함수

개요 IRR 함수는 주기적인 현금 흐름에 대한 내부수익률(internal rate of return)을 반환하는 함수입니다. 구문 IRR(values, ) values 필수 요소로, 셀에 대한 참조 또는 배열입니다. 양수 값과 음수 값이 각각 한 개 이상씩 포함되어야 합니다. 텍스트, 논리값 또는 빈 셀은 무시됩니다. guess 선택 요소로, IRR 계산에 처음 사용할 값입니다. guess에서 시작하여 결과가 0.00001% 이내의 오차 범위에 들어올 때까지 반복합니다. guess를 생략하면 0.1(10%)로 간주합니다. 20번 이상 반복한 후에도 ...

엑셀 / 함수 / MAX, MIN, MAXIFS, MINIFS / 최댓값, 최솟값 구하는 함수

엑셀 / 함수 / MAX, MIN, MAXIFS, MINIFS / 최댓값, 최솟값 구하는 함수

MAX, MIN 개요 MAX는 최댓값을 구하는 함수, MIN은 최솟값을 구하는 함수입니다. 구문 MAX(number1, , ...) ​MIN(number1, , ...) number1, number2, ... : number1은 필수 요소이고, 이후의 number는 선택 요소입니다. 함수를 입력하지 않고 의 오른쪽 끝에 있는 메뉴를 이용할 수도 있습니다. 예제 참고 k번째로 큰 값을 구하고 싶다면 LARGE 함수를 사용합니다. k번째로 작은 값을 구하고 싶다면 SMALL 함수를 사용합니다. 메뉴에는 최대값, 최소값이라고 되어 있지만, 표준말는 최댓값, ...

엑셀 / 함수 / SUMSQ / 제곱의 합 구하는 함수

엑셀 / 함수 / SUMSQ / 제곱의 합 구하는 함수

개요 SUMSQ는 제곱의 합을 구하는 함수입니다. 구문 SUMSQ(number1, , ...) number1, number2, ... : number1은 필수 요소이고, 이후의 number는 선택 요소입니다. 인수는 255개까지 넣을 수 있습니다. 예제 1부터 4까지 제곱의 합을 구합니다.

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

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

개요 REPLACE와 REPLACEB는 특정 위치의 문자열을 다른 문자열로 바꾸는 함수입니다.  특정 위치를 찾을 때 REPLACE 함수는 글자 수를 기준으로 하고, REPLACEB 함수는 바이트를 기준으로 합니다. 따라서 한 글자를 2바이트로 계산하는 한국어, 일본어, 중국어에서 차이가 납니다. 구문 REPLACE REPLACE(old_text, start_num, num_chars, new_text) old_text : 필수 요소로, 문자를 바꿀 문자열입니다. start_num : 필수 요소로, old_text에서 new_text로 바꿀 문자의 위치입니다. num_chars : 필수 요소로, old_text에서 사라질 문자의 ...

엑셀 / 달력 만드는 방법

엑셀 / 달력 만드는 방법

연말이 되면 여기저기서 달력을 받습니다. 고전적인 것도 있고 예쁜 것도 있습니다. 하지만 100% 마음에 드는 것은 없습니다. 그래서 엑셀로 나만의 달력을 만들었습니다. 달력을 만들 때 가장 귀찮은 것은 날짜를 채우는 것입니다. 날짜만 입력하면 나머지는 모양을 꾸미는 것이므로 어렵지 않습니다. 그렇다면 어떻게 날짜를 채울까요? 가로로 요일을 씁니다. 일요일 밑에 날짜를 입력합니다. 가로 방향으로 드래그하여 날짜를 ...

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

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

개요 DAYS 함수는 두 날짜 사이의 일수를 반환하는 함수입니다. 구문 DAYS(end_date, start_date) end_date : 필수 요소로, 끝나는 날짜입니다. start_date : 필수 요소로, 시작하는 날짜입니다. 끝나는 날짜를 앞에, 시작하는 날짜를 뒤에 입력한다는 것에 주의합니다. 끝나는 날짜가 시작하는 날짜보다 이전이면 음수를 반환합니다. 예제 2018년 1월 1일부터 2018년 1월 15일까지의 일수를 계산하는 예제입니다. 만약 수식에 날짜를 직접 입력하고 싶다면 날짜를 따옴표로 감쌉니다. =DAYS("2018-01-15","2018-01-01")

엑셀 / 함수 / YEAR, MONTH, DAY / 년, 월, 일 반환하는 함수

엑셀 / 함수 / YEAR, MONTH, DAY / 년, 월, 일 반환하는 함수

개요 YEAR, MONTH, DAY는 날짜에서 년, 월, 일을 추려내는 함수입니다. 구문 YEAR(serial_number) MONTH(serial_number) DAY(serial_number) 예제 아래는 2019년 10월 20일이라는 날짜에서 년, 월, 일을 출력하는 예제입니다. serial_number 날짜는 일련번호로 저장됩니다. 이를 엑셀에서는 serial_number라고 합니다. 1은 1900년 1월 1일을 뜻하고, 2는 1900년 1월 2일을 뜻합니다. 0 또는 빈 값은 1900년 1월 0일입니다. 날짜 형식으로 표현된 값이 있을 때... 표시 형식을 일반으로 변경하면... serial_number를 볼 ...

엑셀 / 함수 / UPPER, LOWER, PROPER / 대문자로 또는 소문자로 변환하는 함수

엑셀 / 함수 / UPPER, LOWER, PROPER / 대문자로 또는 소문자로 변환하는 함수

개요 UPPER, LOWER, PROPER는 대문자 또는 소문자 변환과 관련된 함수입니다. UPPER : 모두 대문자(upper case)로 바꿉니다. LOWER : 모두 소문자(lower case)로 바꿉니다. PROPER : 단어의 첫글자는 대문자로, 나머지는 소문자로 바꿉니다. 구문 UPPER(text) LOWER(text) PROPER(text) text : 필수 요소로, 대문자로 또는 소문자로 변환할 텍스트입니다. PROPER 함수 단어의 첫째 문자를 대문자로 변환하고, 나머지 문자들은 소문자로 변환합니다. 예를 들어 PROPER("abCdE") 는 Abcde입니다. 단어의 첫째 문자가 영문자가 아닌 경우, 영문자가 아닌 문자 다음에 오는 영문자를 대문자로 ...