Excel & VBA---Brain Training


  • 01

상황에 따라서 배열은 항상 사용하여야 한다

엑셀은 분석도구이고, 분석도구이니 당연히 정보의 정렬도 마우스 몇번
크릭하면 끝난다..
그러나 실상황에서는 보고 싶은 순서가 오름차나, 내림차가 아닌
특정한 순서대로 보고 싶은 경우가 있다
엑셀의 오름차,내림차로는 정렬을 할수 없는 특별한 정보를 어떤
정해진 순서로 하고 싶은 경우다.
아래의 그림과 같이 하고 싶은 것이다



아래의 코드를 실행하면 문제의 테이블이 만들어진다
이것을 그림과 같이 원하는 정렬을 해보시는 문제다

Sub makeSample()
Dim shtX As Worksheet
Const SHT_NAME As String = "BlockSorting"
Dim iRow As Integer
Dim rTable As Range
Dim rRow As Range
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(SHT_NAME).Delete
Application.DisplayAlerts = True

Set shtX = Worksheets.Add
shtX.Name = SHT_NAME
With shtX.Range("A1")
    .Resize(, 3) = Array("Data_A", "Data_B", "Data_C")
    For iRow = 2 To 200
        .Cells(iRow, 1).Resize(, 3) = Array(Chr(Int(Rnd() * 20) + 65), Chr(Int(Rnd() * 4) + 65), Int(Rnd() * 1000) + 1000)
    Next
    Set rTable = .CurrentRegion
End With
rTable.Sort Range("A1"), xlAscending, Range("B1"), , xlAscending, , , xlYes

Dim sOld As String
Dim rBlock As Range
Dim bX As Boolean
Set rTable = rTable.Offset(1).Resize(rTable.Rows.Count - 1)


For Each rRow In rTable.Rows
    If rBlock Is Nothing Then
        Set rBlock = rRow
    Else
        If rBlock.Cells(1) = rRow.Cells(1) Then
            Set rBlock = rBlock.Resize(rBlock.Rows.Count + 1)
        Else
            If Not bX Then
                rBlock.Interior.ColorIndex = 6
            End If
            bX = Not bX
            Set rBlock = rRow
        End If
    End If
Next

End Sub

해법은 다양할 것이다

***[LOG-IN]***

  • 01