rand(life)

[vba] Specialcells(2) 본문

컴퓨터/엑셀

[vba] Specialcells(2)

flogsta 2017. 7. 21. 18:13

오늘의 질문글

엑셀에서 두열의 셀값을 비교하여

두개의 셀값이 같으면

하나의 값을 삭제하는 매크로

이다.


이정도는 쉽지... 하면서 내가 만든 코드는 다음과 같다

Sub del_dup()
Dim rng As Range, r As Range
Set rng = Range("B1", Cells(Rows.Count, "B").End(3))
For Each r In rng
If r = r(, 2) Then
r(, 2).ClearContents
End If
Next
End Sub

답변을 달려고 했더니, 큰형님의 답변이 이미 달려있다.

Sub Macro()
 Dim rng As Range
  Application.ScreenUpdating = False
        On Error Resume Next
   For Each rng In Columns("C").SpecialCells(2)
     If rng = rng.Offset(, -1) Then rng.ClearContents
    Next rng
End Sub

B열이 아니라 C열을 기준으로 하셨다.

게다가 SpecialCells(2)를 범위로 잡았다. 왜 그럴까? 이유를 생각해보니

B열에는 빈칸이 없지만 C열에는 빈칸이 있다. 그러므로, 빈칸을 제외하고 값이 있는 셀만으로 범위를 잡는 것이 더 빠르기 때문이라는 생각이 들었다.

역시, 내공이란건 무시할 수 없다.

참고로, 자주 쓰이는 것은 다음과 같다.

SpecialCells(2) = SpecialCells(xlCellTypeConstants) 상수만

SpecialCells(4) = SpecialCells(xlCellTypeBlanks) 빈셀만

SpecialCells(11)  = SpecialCells(xlCellTypeLastCell) 데이터가 있는 마지막 셀

SpecialCells(12) = SpecialCells(xlCellTypeVisible) 보이는 셀만