Computer >> 컴퓨터 >  >> 소프트웨어 >> Office

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

여러 개의 엑셀 시트를 동시에 다루다 보면, 가독성과 관리 효율을 높이기 위해 특정 조건에 맞는 데이터만 한 시트에서 다른 시트로 복사해야 하는 경우가 자주 발생합니다. 이런 작업을 수행할 때 VBA 매크로를 활용하면 가장 빠르고 안전하게 처리할 수 있습니다. 이 글에서는 고급 필터(Advanced Filter)와 VBA 매크로를 사용하여 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법을 단계별로 소개합니다.

실습 파일 다운로드

아래에서 무료 실습용 엑셀 워크북을 내려받아 함께 따라 해볼 수 있습니다.

VBA 고급 필터로 다른 시트에 데이터 복사하기 – 3가지 방법

예제로 사용할 데이터셋은 다음과 같습니다. Original(원본)이라는 이름의 워크시트에 B4부터 E12 범위까지 데이터가 입력되어 있으며, 중복 값도 포함되어 있습니다. 그리고 G4:H5 범위에는 필터 조건이 저장되어 있습니다.

우리가 하려는 작업은 Name 열 값이 John이면서 Marks(점수)가 80 미만인 행(G4:H5 셀에 저장된 조건)만 골라내어, 고급 필터 기능으로 다른 시트에 복사하는 것입니다. 아래에서 서로 다른 세 가지 방식으로 이 작업을 수행해 보겠습니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

세 가지 방법은 각각 직접 작성한 VBA 코드로 데이터 복사, 사용자가 선택한 범위 기준으로 필터링, 그리고 매크로 기록을 통한 시트 간 데이터 전송입니다. 모든 방법은 위의 데이터셋을 예제로 진행합니다.

방법 1. VBA 코드를 직접 삽입하여 고급 필터로 데이터 복사하기

먼저, Original 시트에서 John의 점수가 80 미만인 데이터만 추출해 Target(대상) 시트로 복사하는 VBA 코드를 작성하는 방법을 알아보겠습니다.

단계:

  • 먼저 키보드에서 Alt + F11을 누르거나, 리본 메뉴에서 개발 도구 → Visual Basic을 클릭해 Visual Basic 편집기를 엽니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 코드 창이 열리면 상단 메뉴에서 삽입 → 모듈을 클릭합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 그다음 아래 코드를 복사하여 코드 창에 붙여넣습니다.
Sub AdvancedFilterCode()
Dim iRange As Range
Dim iCriteria As Range
'set the range to filter and the criteria range
Set iRange = Sheets("Original").Range("B4:E12")
Set iCriteria = Sheets("Original").Range("G4:H5")
'copy the filtered data to the destination
iRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=iCriteria, CopyToRange:=Sheets("Target").Range("B4:E4"), Unique:=True
End Sub

이제 코드 실행 준비가 완료되었습니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • F5 키를 누르거나 메뉴에서 실행 → Sub/UserForm 실행을 선택해 매크로를 실행합니다. 도구 모음의 작은 실행 아이콘을 클릭해도 됩니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

코드 실행 후 결과는 아래 이미지와 같습니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

실행 결과, John의 점수가 80 미만인 행만 골라져 Target 시트로 복사된 것을 확인할 수 있습니다. 이렇게 VBA의 고급 필터를 활용하면 조건부 데이터 복사를 단번에 처리할 수 있습니다.

더 읽어보기: 엑셀에서 고급 필터로 데이터를 다른 시트에 복사하는 방법

방법 2. 사용자가 선택한 범위를 기준으로 필터링하는 VBA 매크로 구현하기

이번에는 코드에 범위를 직접 지정하지 않고, InputBox를 통해 사용자가 직접 범위를 선택하도록 만든 VBA 매크로를 살펴보겠습니다. 이 방식을 사용하면 하나의 매크로를 다양한 데이터와 조건에 재활용할 수 있다는 장점이 있습니다.

단계:

  • 앞서와 같은 방법으로 개발 도구 탭에서 Visual Basic 편집기를 열고 모듈을 삽입합니다.
  • 코드 창에 아래 코드를 복사하여 붙여넣습니다.
Sub AdvancedFilterBySelection()
Dim iTrgt As String
Dim iRange As Range
Dim iCriteria As Range
Dim iDestination As Range
On Error Resume Next
iTrgt = ActiveWindow.RangeSelection.Address
Set iRange = Application.InputBox("Select Range to Filter", "Excel", iTrgt, , , , , 8)
If iRange Is Nothing Then Exit Sub
Set iCriteria = Application.InputBox("Select Criteria Range", "Excel", "", , , , , 8)
If iCriteria Is Nothing Then Exit Sub
Set iDestination = Application.InputBox("Select Destination Range", "Excel", "", , , , , 8)
If iDestination Is Nothing Then Exit Sub
iRange.AdvancedFilter xlFilterCopy, iCriteria, iDestination, False
iDestination.Worksheet.Activate
iDestination.Worksheet.Columns.AutoFit
End Sub

코드 입력이 끝났으면 실행합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 매크로를 실행하면 팝업창이 나타납니다. 여기서 필터링할 범위를 선택합니다(예제에서는 B4:E12).
  • 선택 후 확인(OK)을 누릅니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 다음 팝업창에서는 데이터셋에 저장된 조건 범위를 선택합니다(예제에서는 G4:H5).
  • 역시 확인을 눌러 진행합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 마지막 팝업창에서는 복사된 데이터를 저장할 목적지 범위를 선택합니다. 예제에서는 Destination(결과) 시트의 B2 셀을 지정했습니다.
  • 선택 후 확인을 클릭합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

실행 결과는 아래 이미지를 참고하세요.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

최종적으로 John의 점수가 80 미만인 데이터만 Original 시트에서 골라져 Destination 시트로 복사됩니다. 또한 코드 마지막 부분 덕분에 결과 시트가 자동으로 활성화되고 열 너비까지 자동 맞춤 처리됩니다.

관련 내용: 엑셀 고급 필터가 작동하지 않을 때 (2가지 원인과 해결책)

함께 읽으면 좋은 글

  • 엑셀 고급 필터에서 조건 범위에 텍스트가 있을 때 활용하는 방법
  • 엑셀 동적 고급 필터 (VBA 및 매크로)
  • 엑셀 조건 범위를 활용한 고급 필터 (18가지 응용)
  • 엑셀에서 여러 조건으로 고급 필터 적용하기 (15가지 예제)
  • 엑셀 VBA 예제: 조건이 있는 고급 필터 사용법 (6가지 조건)

방법 3. 매크로 기록으로 데이터를 다른 시트에 복사하기

마지막 방법은 VBA 코딩 없이 매크로 기록(Macro Recording) 기능만으로 같은 작업을 수행하는 것입니다. Original 시트에서 John의 점수가 80 미만인 데이터를 Filtered(필터링) 시트로 추출해 보겠습니다.

단계:

  • 먼저 새 워크시트를 하나 엽니다(예제에서는 Filtered 시트).
  • 해당 시트에는 원본 데이터셋의 헤더 행(제목 행)만 복사해 둡니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 이제 Original 시트로 이동하면, 화면 왼쪽 하단에 작은 매크로 아이콘이 보입니다. 이 아이콘을 클릭하면 매크로 기록이 시작됩니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 매크로 기록 팝업창이 나타나면 원하는 매크로 이름을 입력합니다. 여기서는 AdvancedFilter로 지정했습니다.
  • 매크로를 저장할 위치를 선택합니다. 현재 통합 문서에 저장하기 위해 현재 통합 문서(This Workbook)를 선택했습니다.
  • 확인을 클릭하면 기록이 시작됩니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • Original 시트로 돌아가면 방금 시작한 매크로가 기록 중임을 확인할 수 있습니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 복사된 데이터를 담을 시트(예: Filtered 시트)로 이동한 뒤, 아무 셀이나 선택한 상태에서 데이터 → 고급을 클릭합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 고급 필터 대화상자가 열리면 다음과 같이 설정합니다.
  • 먼저 동작(Action) 항목에서 다른 위치에 복사(Copy to another location) 옵션을 체크합니다.
  • 목록 범위(List range) 입력란에는 Original 시트에서 필터링할 범위를 지정합니다(예제에서는 B4:E12).

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 조건 범위(Criteria range) 입력란에는 Original 시트에 저장된 조건(John의 점수가 80 미만) 범위를 지정합니다(예제에서는 G4:H5).

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 복사 위치(Copy to) 입력란에는 복사된 데이터를 저장할 Filtered 시트로 이동해 헤더 범위를 선택합니다(예제에서는 B4:E4).
  • 마지막으로 확인을 클릭합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

이 과정의 결과는 아래 이미지와 같습니다. John의 점수가 80 미만인 데이터만 Filtered 시트로 정상적으로 복사되었습니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 이제 시트 왼쪽 하단의 매크로 아이콘을 다시 클릭해 기록을 중단합니다. 이후에는 기록된 매크로를 실행할 때마다 위 과정이 자동으로 반복 수행됩니다.

다만 이 방법에는 한 가지 단점이 있습니다. Original 시트에 새 데이터를 추가해도, 해당 데이터가 조건을 충족하더라도 Filtered 시트는 자동으로 갱신되지 않습니다.

원본 시트에 새 데이터가 추가될 때마다 코드를 실행하면 Filtered 시트도 자동으로 업데이트되도록 만들려면, 기록된 코드를 약간 수정해야 합니다. 수정 과정은 아래와 같습니다.

단계:

  • 먼저 리본 메뉴에서 보기 → 매크로 → 매크로 보기를 선택합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 매크로 팝업창이 열리면 방금 기록으로 생성한 매크로 이름(예제에서는 AdvancedFilter)를 선택합니다.
  • 그다음 편집(Edit) 버튼을 클릭합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 기록된 매크로의 코드가 코드 창에 나타납니다(아래 이미지 참조).

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 아래 그림처럼 파란색으로 표시된 불필요한 부분을 삭제합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 이어서 다음 그림과 같이 코드를 수정합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 수정 후 최종 코드는 다음과 같습니다.
Sub AdvancedFilter()
Sheets("Original").Range("B4").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Original").Range("G4:H5"), CopyToRange:=Sheets("Filtered").Range("B4:E4"), Unique:=False
End Sub
  • 수정한 코드를 저장합니다.
  • Original 시트로 돌아가 조건에 부합하는 새 데이터를 추가합니다. 예제에서는 John의 정보에 점수 76점을 추가했습니다. 76은 '80 미만' 조건에 해당합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • 코드를 실행하고 아래 이미지에서 결과를 확인합니다.

엑셀 VBA 고급 필터 활용법: 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법

  • Filtered 시트에 점수 76점John의 정보가 새로운 행으로 추가되었습니다. 조건(점수<80)을 충족하는 데이터가 정상적으로 반영된 것입니다.

더 읽어보기: 엑셀에서 고급 필터로 고유한 레코드만 추출하는 방법

마무리

지금까지 엑셀에서 VBA 매크로와 고급 필터를 활용해 조건에 맞는 데이터를 다른 시트로 복사하는 3가지 방법을 살펴보았습니다. 직접 코딩 방식, 사용자 입력 방식, 매크로 기록 방식 각각의 장단점을 이해하고 상황에 맞게 활용해 보시기 바랍니다. 이 글이 여러분의 업무 생산성 향상에 도움이 되었기를 바랍니다. 주제에 대해 궁금한 점이 있다면 언제든 질문해 주세요.

관련 글

  • 엑셀 고급 필터로 빈 셀 제외하기 (3가지 쉬운 방법)
  • 엑셀 VBA: 범위 내 여러 조건으로 고급 필터 적용하기 (5가지 방법)
  • 엑셀에서 고급 필터로 고유한 레코드만 추출하는 방법
  • 엑셀에서 고급 필터로 다른 위치에 복사하기
  • 엑셀 고급 필터: "포함하지 않음" 조건 적용하기 (2가지 방법)
  • 엑셀에서 한 열의 여러 조건으로 고급 필터 적용하기