엑셀 VBA 오름차순, 내림차순 데이터 정렬하는 방법

엑셀(Excel)/VBA

엑셀 VBA 오름차순, 내림차순 데이터 정렬하는 방법

 

환경: Microsoft Excel 2013

 

엑셀에서는 데이터를 정렬하고 추출할 수 있는 다양한 기능을 제공하고 있습니다. 이전에 소개한 워크시트에서 리본 메뉴를 이용하는 것이 아닌 VBA 코드를 이용해서 오름차순, 내림차순으로 데이터를 정렬해 보겠습니다. 이 방법은 일일이 하나씩 읽어서 재정렬하기 때문에 작업할 데이터가 많은 경우 시간이 오래 걸리기 때문에 적합하지 않습니다.

 

먼저 오름차순으로 정렬할 수 있도록 작업할 영역을 선택해야겠죠. B2 셀에서 연속된 데이터 영역을 알아오기 위해 CurrentRegion 속성을 사용하였습니다. 그럼 전체 작업할 영역을 가져 올 수 있습니다. 그리고 가져온 영역을 하나씩 읽어서 순서를 바꾸기 위해 이 중 For 문을 사용하였습니다. 오름차순일 경우 전체 데이터를 읽으면서 자신보다 작은 데이터는 위치를 바꿔야 하기 때문에 이중 For 문을 사용한 것입니다.

 

Dim rng As Range

 

Set rng = ActiveSheet.Range("B2").CurrentRegion

 

For i = 2 To rng.Count

    For j = i + 1 To rng.Count

       

    Next j

Next i

 

이 중 For 문 안에 들어갈 소스는 다음과 같습니다. 자신보다 작은 값이 발견되면 스왑을 통해서 셀에 있는 데이터를 바꾸는 것입니다.

 

If rng.Cells(j) < rng.Cells(i) Then

    '// swap numbers

    temp = rng.Cells(i)

    rng.Cells(i) = rng.Cells(j)

    rng.Cells(j) = temp

End If

 

엑셀 VBA 오름차순, 내림차순 데이터 정렬하는 방법

 

아래는 오름차순 정렬을 위한 전체 소스입니다. 함수를 실행하면 데이터는 오름차순으로 정렬이 됩니다. 이중 For 문과 셀에 값을 일일이 변경해 줘야 하기 때문에 데이터가 많을 경우 시간이 좀 걸린다는 것이 아쉽네요.

 

Dim rng As Range

 

Set rng = ActiveSheet.Range("B2").CurrentRegion

 

For i = 2 To rng.Count

    For j = i + 1 To rng.Count

If rng.Cells(j) < rng.Cells(i) Then

    '// swap numbers

    temp = rng.Cells(i)

    rng.Cells(i) = rng.Cells(j)

    rng.Cells(j) = temp

End If

    Next j

Next i

 

엑셀 VBA 오름차순, 내림차순 데이터 정렬하는 방법

 

오름차순에서 내림차순으로 바꾸는 것은 간단합니다. IF 조건만 바꿔 주시면 됩니다. 기존 조건을 If rng.Cells(j) > rng.Cells(i) Then 으로 변경하고 함수를 실행합니다

엑셀 VBA 오름차순, 내림차순 데이터 정렬하는 방법


저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군