🔹왜 정의된 이름을 삭제해야 할까?
1. 이름이 너무 많아 엑셀 파일이 느려짐
2. 삭제된 셀을 참조하는 이름에서 #REF! 오류 발생
3. 외부 데이터를 가져올 때 필요 없는 이름이 추가됨
4. 정의된 이름이 많아 수동 관리가 어려움
🔹 정의된 이름이 많거나, 외부 데이터를 가져오면서 오류가 발생한 경우, 이름을 정리하면 파일이 최적화됩니다.
🔹 VBA를 사용하면 수동으로 찾을 필요 없이 한 번에 삭제할 수 있습니다.
✅ 1. 모든 오류가 난 이름 자동 삭제
Sub 오류난_이름삭제()
Dim 이름 As Name
Dim 삭제된개수 As Integer
삭제된개수 = 0
On Error Resume Next ' 오류 방지
For Each 이름 In ActiveWorkbook.Names
If InStr(1, 이름.RefersTo, "#REF!") > 0 Then ' #REF! 오류가 있는지 확인
이름.Delete
삭제된개수 = 삭제된개수 + 1
End If
Next 이름
On Error GoTo 0
MsgBox 삭제된개수 & "개의 오류가 난 이름이 삭제되었습니다!", vbInformation
End Sub
|
📌 #REF! 오류가 있는 정의된 이름을 자동으로 삭제
📌 실수 방지를 위해 삭제된 개수를 메시지로 출력
✅ 2. 모든 정의된 이름 삭제 (#REF! 여부 상관없이)
Sub 모든이름삭제()
Dim 이름 As Name
Dim 삭제된개수 As Integer
삭제된개수 = 0
On Error Resume Next ' 오류 방지
For Each 이름 In ActiveWorkbook.Names
이름.Delete
삭제된개수 = 삭제된개수 + 1
Next 이름
On Error GoTo 0
MsgBox 삭제된개수 & "개의 정의된 이름이 삭제되었습니다!", vbInformation
End Sub
|
📌 엑셀 파일에 정의된 모든 이름을 삭제 (주의: 모든 이름이 삭제됨)
✅ 3. 특정 이름만 삭제
Sub 특정이름삭제()
Dim 이름 As String
이름 = "잘못된이름" ' 삭제할 이름 입력
On Error Resume Next
ActiveWorkbook.Names(이름).Delete
On Error GoTo 0
MsgBox "이름 '" & 이름 & "' 이(가) 삭제되었습니다!", vbInformation
End Sub
|
📌 특정한 정의된 이름만 삭제 (잘못된이름 이름을 삭제)
✅ 4. 현재 정의된 이름 목록 확인
Sub 이름목록출력()
Dim 이름 As Name
Dim 목록 As String
For Each 이름 In ActiveWorkbook.Names
목록 = 목록 & 이름.Name & " → " & 이름.RefersTo & vbNewLine
Next 이름
If 목록 = "" Then
MsgBox "정의된 이름이 없습니다!", vbInformation
Else
MsgBox "현재 정의된 이름 목록:" & vbNewLine & 목록, vbInformation
End If
End Sub
|
📌 엑셀에 등록된 모든 정의된 이름과 해당 참조값(RefersTo)을 메시지로 출력
✅ 5. #REF! 오류가 난 이름을 확인하고 삭제 여부 선택
Sub 오류이름확인후삭제()
Dim 이름 As Name
Dim 오류이름 As String
Dim 삭제확인 As VbMsgBoxResult
For Each 이름 In ActiveWorkbook.Names
If InStr(1, 이름.RefersTo, "#REF!") > 0 Then ' #REF! 포함 여부 확인
오류이름 = 오류이름 & 이름.Name & vbNewLine
End If
Next 이름
If 오류이름 = "" Then
MsgBox "오류가 난 정의된 이름이 없습니다!", vbInformation
Else
삭제확인 = MsgBox("다음 오류가 난 정의된 이름을 삭제할까요?" & vbNewLine & vbNewLine & 오류이름, vbYesNo + vbExclamation, "오류난 이름 삭제")
If 삭제확인 = vbYes Then
For Each 이름 In ActiveWorkbook.Names
If InStr(1, 이름.RefersTo, "#REF!") > 0 Then
이름.Delete
End If
Next 이름
MsgBox "모든 오류가 난 정의된 이름이 삭제되었습니다!", vbInformation
Else
MsgBox "삭제를 취소했습니다.", vbInformation
End If
End If
End Sub
|
📌 삭제 전에 오류가 난 정의된 이름 목록을 사용자에게 보여주고, 삭제 여부를 선택 가능