rand(life)
[vba] Specialcells(2) 본문
오늘의 질문글은
엑셀에서 두열의 셀값을 비교하여
두개의 셀값이 같으면
하나의 값을 삭제하는 매크로
이다.
이정도는 쉽지... 하면서 내가 만든 코드는 다음과 같다
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) 보이는 셀만