Excel & VBA---Brain Training


  • 01

범위를 배열로 처리하여 작업효율을 높이기

아래의 코드를 실행하면 1000행에 20열짜리 쌤플테이블이 만들어지고 첫째행을 복사하여 테이블의 랜덤으로 행을 선택하여 붙여 넣기를 하였다 즉 첫째열과 같은 행이 같은 값의 여러개의 행이 만들어 진것이다

Sub sampeTable()
Const SAMPLE_SHT As String = "Sample"
Dim iRow As Integer
Dim rTable As Range
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(SAMPLE_SHT).Delete
Application.DisplayAlerts = True

With Worksheets.Add
    .Name = SAMPLE_SHT
    With .Cells(1).Resize(1000, 20)
        .Formula = "=INT(RAND()*1000)+1000"
        .Value = .Value
    End With
    Set rTable = .UsedRange
End With
rTable.Rows(1).Copy
For iRow = 1 To 200
    rTable.Worksheet.Paste rTable.Rows(Int(Rnd() * 900) + 1)
Next
End Sub

이것은 행별로 정보를 추가할때
중복되는 것이 있는지 없는지 확인하여야 하는 경우가 많을 것이다
어떻게 확인하는 방법이 좋을지 생각해 보시기 바란다

행별로 각각의 셀을 모두 비교한다면 시간이 아주 많이 걸릴 것이다
배열로 각행을 받아서 배열을 문자열로 만들어 문자열끼기 비교한다면 훨씬 간단 할것이다

Dim sX As String
sX=Join(Array("A","B","C","D","E"),",")
로 받으면 sX값은

"A,B,C,D,E"

가 된다

이것을 힌트로 비교하여 아래의 그림과 같이 같은 행에 노랑색 표시를 해보시길...
엑셀의 범위는 2차배열이다..

Join함수를 사용할때 전달하여야 하는 배열은 1차배열이라는 점을 감안하시고..
그러니 2차배열을 어떻게 쉽게 1차배열로 만들어야 할지..
아주 간단하지만 이 요령을 알면 아주 많은 부분에서 작업효율을 높일수 있은 것이다




***[LOG-IN]***

  • 01