본문 바로가기

엑셀 VBA를 활용한 중복값 찾기 기능 구현하기

라라디오디 발행일 : 2023-10-20

엑셀 VBA를 활용하여 중복값 찾기 기능을 구현하는 방법에 대해 소개하는 글을 작성할 예정입니다. 이 글에서는 VBA의 코드를 사용하여 데이터 범위 내에서 중복된 값을 식별하고, 중복된 값을 강조하거나 삭제하는 방법을 알려드릴 것입니다. 또한, 중복값을 찾는 기능을 조건에 따라 적용하는 방법에 대해서도 다룰 예정이며, 예시와 함께 보다 실용적인 활용 방법들을 제시할 것입니다. 이를 통해 엑셀 VBA를 이용한 중복값 찾기 기능을 쉽게 구현할 수 있도록 도움을 드릴 것입니다.


엑셀 VBA를 활용한 중복값 찾기 기능 구현하기 caption=

1. 중복값 찾기 함수 설계하기

중복값 찾기 함수를 설계하기 위해 아래와 같은 과정을 거칩니다.

1. 입력으로 정수 리스트를 받습니다.
2. 빈 딕셔너리를 생성합니다.
3. 입력받은 정수 리스트를 순회하면서 각 숫자가 딕셔너리에 있는지 확인합니다.
4. 딕셔너리에 없는 경우, 해당 숫자를 키로 가지고 값을 1로 설정하여 딕셔너리에 추가합니다.
5. 딕셔너리에 이미 있는 경우, 해당 숫자의 값을 1 증가시킵니다.
6. 딕셔너리 순회를 마치면 중복값이 발견된 숫자들과 해당 숫자가 몇 번 반복되었는지를 저장한 딕셔너리가 완성됩니다.
7. 딕셔너리를 순회하면서 값이 2 이상인 것들을 출력하면 중복값을 찾을 수 있습니다.

이렇게 설계된 중복값 찾기 함수는 아래와 같이 구현할 수 있습니다.

```
def find_duplicate_numbers(numbers):
duplicates = {} # 중복값과 해당 값의 반복 횟수를 저장할 딕셔너리

for num in numbers:
if num in duplicates:
duplicates[num] += 1
else:
duplicates[num] = 1

found_duplicates = [] # 중복값들을 저장할 리스트
for num, count in duplicates.items():
if count >= 2:
found_duplicates.append(num)

return found_duplicates
```

이 함수를 사용하면 입력으로 주어진 정수 리스트에서 중복된 숫자들을 찾아서 리스트로 반환할 수 있습니다.

2. 엑셀 VBA를 이용한 중복값 찾기 알고리즘 구현하기

중복된 값을 찾는 알고리즘을 엑셀 VBA를 이용하여 구현하는 방법은 다음과 같다.

1. 엑셀 파일을 열고 중복값을 확인할 열을 선택한다.
2. 선택한 열의 데이터를 배열로 저장한다.
3. 배열을 순회하면서 각 요소와 다른 요소들을 비교한다.
4. 비교 시 중복된 값이 있으면 중복된 값을 확인하는 셀에 "중복"이라는 텍스트를 입력한다.
5. 중복된 값을 모두 찾으면 결과를 확인한다.

아래는 이 알고리즘을 구현한 VBA 코드 예시이다.

```vba
Sub FindDuplicates()
Dim rng As Range
Dim data() As Variant
Dim cell As Range
Dim i As Long, j As Long
Dim duplicate As Boolean

' 중복을 확인할 열 범위 선택
Set rng = Range("A1:A10")

' 데이터 배열로 저장
data = rng.Value

' 데이터 배열 순회
For i = 1 To UBound(data)
' 중복 여부 초기화
duplicate = False

For j = i + 1 To UBound(data)
' 중복 확인
If data(i, 1) = data(j, 1) Then
duplicate = True
Exit For
End If
Next j

' 중복된 값이 있으면 "중복" 입력
If duplicate Then
rng.Cells(i, 1).Offset(0, 1) = "중복"
Else
rng.Cells(i, 1).Offset(0, 1) = "미중복"
End If
Next i
End Sub
```

이 코드는 엑셀 파일의 A1:A10 범위에 있는 데이터를 순회하면서 중복 값을 확인하고, 중복 여부를 B1:B10 범위에 입력한다. 중복된 값이 있는 경우 "중복"이라는 텍스트가 입력되고, 중복되지 않은 값은 "미중복"이라는 텍스트가 입력된다.

원하는 대상 범위나 결과 출력 위치를 코드 내에서 수정하면 다른 범위에 대한 중복값 확인도 가능하다.

3. 중복값 찾기 기능을 위한 VBA 마크로 설정하기

중복 값을 찾는 VBA 매크로를 설정하는 방법은 다음과 같습니다:

1. Excel을 열고 중복값을 찾고자 하는 데이터가 있는 시트를 선택합니다.
2. "개발" 탭에서 "비주얼 베이직"을 클릭하여 VBA 편집기를 엽니다.
3. VBA 편집기에서 "삽입" 메뉴를 클릭하고 모듈을 선택합니다.
4. 새 모듈이 열리면 아래의 코드를 입력합니다:

```vb
Sub FindDuplicates()
Dim rng As Range
Dim cell As Range

' 중복값을 찾을 범위를 지정합니다.
Set rng = Range("A1:A10") ' 중복값을 찾고자 하는 열의 범위로 변경합니다.

' 중복값을 저장할 변수를 선언합니다.
Dim duplicates As New Collection

For Each cell In rng
On Error Resume Next
' 중복값이라면 컬렉션에 추가합니다.
duplicates.Add cell.Value, CStr(cell.Value)
On Error GoTo 0
Next cell

' 중복값을 출력합니다.
Dim duplicateCell As Variant
For Each duplicateCell In duplicates
MsgBox "중복값: " & duplicateCell
Next duplicateCell
End Sub
```

5. 코드 중에서 `Set rng = Range("A1:A10")` 부분에 중복 값을 찾고자 하는 열의 범위를 입력합니다. 예를 들어, "A" 열에서 중복 값을 찾으려면 `Set rng = Range("A:A")`로 변경합니다.
6. VBA 편집기에서 실행하려는 코드를 선택한 다음 "재생" 버튼을 클릭하거나, Alt+F8을 눌러 매크로 대화상자를 열고 "FindDuplicates"를 선택하여 매크로를 실행합니다.
7. 중복 값이 발견되면 메시지 상자가 표시되어 해당 중복 값을 알려줍니다.

이제 이 VBA 매크로를 사용하여 Excel 시트에서 중복 값을 찾을 수 있습니다. 값이 변경되거나 열이 추가될 때마다 업데이트를 위해 매크로를 다시 실행해야 함을 유념하십시오.

4. 중복값 찾기 결과를 엑셀 시트에 표시하기

중복값을 찾아내고 엑셀 시트에 표시하는 방법은 다음과 같습니다:

1. 엑셀을 열고 작업하려는 시트를 선택합니다.
2. 중복을 확인하고자 하는 열을 선택하고, "조건부 서식"을 클릭합니다.
3. "중복값을 강조 표시"를 선택하고, 중복 값이 표시될 색상을 선택합니다.
4. 확인을 클릭하여 서식을 적용합니다.
5. 중복값이 표시된 열을 정렬하여 중복 항목을 확인할 수 있습니다.
6. 필요에 따라 중복값을 다른 시트나 다른 파일로 복사하여 저장할 수 있습니다.

5. 중복값을 처리하는 VBA 코드 작성하기

중복값을 처리하는 VBA 코드를 작성하는 방법에 대해 설명해 드리겠습니다.

1. 중복값 확인

먼저, 중복값을 확인하기 위해 데이터가 있는 열을 선택합니다. 예를 들어, "A"열에 데이터가 있다고 가정해보겠습니다. 다음과 같은 코드를 사용하여 중복값을 확인할 수 있습니다.

```
Sub CheckDuplicate()
Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, "A").End(xlUp).Row

For i = 2 To lastRow
If WorksheetFunction.CountIf(Range("A2:A" & i), Cells(i, 1).Value) > 1 Then
MsgBox "중복값이 존재합니다!"
Exit Sub
End If
Next i

MsgBox "중복값이 존재하지 않습니다!"
End Sub
```

2. 중복값 제거

중복값을 제거하기 위해서는 중복된 값을 찾아 해당 값을 삭제해야 합니다. 다음과 같은 코드를 사용하여 중복값을 제거할 수 있습니다.

```
Sub RemoveDuplicate()
Dim lastRow As Long

lastRow = Cells(Rows.Count, "A").End(xlUp).Row

Range("A1:A" & lastRow).RemoveDuplicates Columns:=1, Header:=xlNo
End Sub
```

위의 코드를 실행시키면 "A"열의 중복값이 제거됩니다.

3. 중복값 필터링

중복값을 제거하지 않고, 중복된 데이터만 표시하고 싶다면 필터링을 사용할 수 있습니다. 다음과 같은 코드를 사용하여 중복값을 필터링할 수 있습니다.

```
Sub FilterDuplicate()
Dim lastRow As Long

lastRow = Cells(Rows.Count, "A").End(xlUp).Row

Range("A1:A" & lastRow).AdvancedFilter Action:=xlFilterInPlace, Unique:=False
End Sub
```

위의 코드를 실행시키면 "A"열에서 중복된 값만 표시됩니다.

이렇게 중복값을 처리하는 VBA 코드를 작성할 수 있으며, 필요에 따라 위의 코드를 수정하여 원하는 동작을 구현할 수 있습니다.

관련 뉴스기사

 

관련 유튜브 영상

엑셀VBA기초 17강 - 중복제거하기(RemoveDuplicates, Array, 단일/다중 중복제거 후 정렬하기)

연관 검색어

댓글