Excel & VBA---Brain Training


  • 01

행열방향으로 만들어진 테이블을 행방향으로 정리하기

아래의 코드를 실행하면
행방향과 열방향으로 구성된 테이블이 만들어진다
이것을 행방향으로만 재구성하기..
아래의 코드를 실행하면 문제의 테이블이 만들어진다
이것을 그림과 같이 원하는 정렬을 해보시는 문제다

Sub makeDummyDataFromERP()
Const LABELS As String = "A,B,C,D,E"
Const SHT_NAME As String = "DummyDatas"
Dim iNumOfDays As Integer
Dim iNextDay As Integer
Dim iNextDayBlock As Integer

Dim iNextLabel As Integer

Dim iRowDatas As Integer
Dim iRow As Integer
Dim sLabels As Variant
Dim iLabelCount As Integer

On Error Resume Next
Application.DisplayAlerts = False
Worksheets(SHT_NAME).Delete
Application.DisplayAlerts = True


iNumOfDays = Int(Rnd() * 10) + 5
iRowDatas = Int(Rnd() * 50) + 50
sLabels = Split(LABELS, ",")
iLabelCount = UBound(sLabels) + 1
With Worksheets.Add
    .Name = SHT_NAME
    For iRow = 3 To iRowDatas
        .Cells(iRow, 1) = getProductName(.Cells(iRow, 1))
    Next
    For iNextDayBlock = 2 To iNumOfDays * 5 Step 5
        iNextDay = iNextDay + 1
        .Cells(1, iNextDayBlock) = DateAdd("d", iNextDay, Date)
        With .Cells(2, iNextDayBlock).Resize(, iLabelCount)
            .Value = sLabels
            .Offset(-1).Merge
            .Offset(-1).Resize(2).HorizontalAlignment = xlCenter
            
        End With
    Next
    Dim rAll As Range
    Set rAll = .UsedRange
    Set rAll = rAll.Offset(2, 1).Resize(rAll.Rows.Count - 2, rAll.Columns.Count - 1)
    rAll.Formula = "=INT(RAND()*1000)+1000"
    rAll.Value = rAll.Value
    
    
End With

End Sub
Private Function getProductName(rX As Range)
On Error Resume Next
Dim iX As Integer
Dim sReturn As String
Dim rFind As Range

Dim rWrittenAlready As Range
Set rWrittenAlready = rX.EntireColumn.Cells(2)
Set rWrittenAlready = rX.Worksheet.Range(rWrittenAlready, rX.Offset(-1))
Do While True
    For iX = 1 To 5
        sReturn = sReturn & Chr(Int(Rnd() * 26) + 65)
    Next
    Set rFind = rWrittenAlready.Find(sReturn)
    If rFind Is Nothing Then getProductName = sReturn: Exit Function
Loop
End Function

위의 것을 실행하면 아래와 같이 만들어진다



위의 그림의 내용을 아래와 같이 재정리하기..



더운 날씨에 더위를 잊는 좋은 방법은 집중하는 것..
집중하시고 풀어 보시기를..

***[LOG-IN]***

  • 01