Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Excel & VBA---Brain Training


  • 01

변덕스러운 Range 개체의 접근

회원님들중에 , 이정도하셨으면 이런 문제는 알아서 응용이 될텐데
하는 문제를 해결해 달라고 보내주시는 화일이 많다
그때 느끼는 것이...아하..무지하게 바쁘신 모양이구나!! 라는 생각이 든다
왜냐면 엑셀프로그래밍이 만만하지 않은 것이
시작할때 ,
[하루에 어느 정도의 시간을 투자할 각오가 되어 있습니까???]라는 설문을
받아서 가능한 분들만 달려들게 할 일이다
영어와 프로그래밍언어는 그런 습관을 갖지 않으면 안된다
그러나
업무는 바쁜데 자동화는 하고 싶고, 그런 경우가 대부분이다
충분히 이해가 되는 일이다
그래서 열심히 시간이 되는 한 풀어 드리고 싶지만
종종 다른 일에 쫓겨서 시간을 끌게 되는 경우가 많다
아무튼 문제가 생기면 항상 메일하시기 바란다
시간이 좀 걸릴 뿐..모두 풀어 드리고 싶은 마음이니까..
엑셀프로그래밍은 만만 한 것이 아니다
영어도 영작이 안되다가, 이렇게 하면 되겠는데요..라고 하면
아하..!! 무지쉽네..그렇다 무지 쉽다..
역시 엑셀프로그래밍도 마찬가지다, 이렇게 하면 되겠는데요..라고 하면
아하..!! 무지쉽네..그렇다 무지 쉽다..
그러나 숙달이라는 시간을 요구하는 두개의 언어인셈이다
아무튼..흥미로운 자기계발분야이다

당초에 만들어 드렸던 테이블은 병합된 셀이 없었다
그런데 사용자가 나름대로 보기 좋게(?) 병합하기를 좋아한다
병합을 하지 않아도 될텐데, 병합하기를 좋아 한다
테이블의 기본정보테이블이 되는 테이블은 병합을 피하는 것이 좋다
아마도 아래아 한글같은데서 테이블을 만들면서 병합하는 기능을
즐겨 사용하다보니, 그런 것을 엑셀에서도 쉴새없이 한다
그러나, 정보관리의 원리를 하는 사람들은 기본정보의 테이블에서는
병합같은 것을 하지 않는다
그냥 순수한 정보를 관리하는 것이 목적이 된다
그런데 엑셀은 하나의 테이블을 순수한 정보만 보관할 것인지..
보기 좋은 보고서로 꾸밀것인지, 구분을 대부분하지 못하여 프로그래밍이
엉키는 가장 중요한 원인이다

아무튼 그런 문제들을 시뮤레이션해보면서
순간마다 드리는 문제에 머리를 써보시기를...

Sub createTable()
Dim iRow As Integer
Dim rSort As Range
With Worksheets.Add
    .Range("A1").Resize(, 5) = Array("ID", "Cate", "Name", "Data1", "Data2")
    For iRow = 2 To 100
        .Range("A" & iRow).Resize(, 5).Value = _
        Array(iRow - 1, Chr(Int(Rnd() * 5) + 65), String(3, Int(Rnd() * 26 + 65)), Int(Rnd() * 100) + 100, Int(Rnd() * 1000) + 1000)
    Next
End With
End Sub

위의 코드를 실행하면 그냥 싱거운 테이블 하나 만들어진다
두번째열(Cate)을 기준으로 오름차 정렬을 해보시기 바란다



***[LOG-IN]***

아래와 같이 코딩을 실행하면

Sub createTable1()
Dim iRow As Integer
Dim rSort As Range
With Worksheets.Add
    .Range("A1").Resize(, 7) = Array("ID", "Cate", "Name", "Data1", "Data2", "Data3", "Data4")
    For iRow = 2 To 100
        .Range("A" & iRow).Resize(, 7).Value = _
        Array(iRow - 1, _
        Chr(Int(Rnd() * 5) + 65), _
        String(3, Int(Rnd() * 26 + 65)), _
        Choose(Int(Rnd() * 5) + 1, "A", "B", "C", "D", "E"), _
        Int(Rnd() * 5) + 1, _
        Choose(Int(Rnd() * 5) + 1, "A", "B", "C", "D", "E") & "_" & Int(Rnd() * 5) + 1, _
        Int(Rnd() * 100) + 100, _
        Int(Rnd() * 1000) + 1000)
    Next
End With

End Sub

아래와 같이 테이블이 만들어지는데 , 문제는



화살표대로 5개의 열을 정렬을 하고 싶다..
그런데 2003버전까지는 3개까지 밖에 한번에 정렬을 할수 없다
2007버전이후의 것으로 하면 여러 열을 한번에 할 수 있다
위의 문제에서는 Range개체의 Sort메소드를 사용했으나
이번 것은 독립된 Sort개체를 사용해 보시기 바란다
Sort개체는 2007버전이후에 만들어진 개체이다

  • 01