Excel & VBA---Brain Training
상황에 따라서 배열은 항상 사용하여야 한다
엑셀은 분석도구이고, 분석도구이니 당연히 정보의 정렬도 마우스 몇번
크릭하면 끝난다..
그러나 실상황에서는 보고 싶은 순서가 오름차나, 내림차가 아닌
특정한 순서대로 보고 싶은 경우가 있다
엑셀의 오름차,내림차로는 정렬을 할수 없는 특별한 정보를 어떤
정해진 순서로 하고 싶은 경우다.
아래의 그림과 같이 하고 싶은 것이다
아래의 코드를 실행하면 문제의 테이블이 만들어진다
이것을 그림과 같이 원하는 정렬을 해보시는 문제다
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]***