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

SOLUTION_English Idioms Book_03 |Application.CountIf()|Debug|Variables |Loop Structure|

엑셀로 나만의 영어사전을 만들어 보자_세번째

이번시간에는 위의 내용은 그대로 놓아두고 테이블을 재구성하자
Data시트를

Idioms시트와
Examples시트로 나누도록 한다



프로그램은 실전을 통하지 않고는 다양한 상황에 접할수 없다
이번의 문제도 좀 다양한 상황에 접하게 되는 경우이다
내공을 키울수 있는 경우가 되겠다

결과를 보면
Data시트의 정보는 모두 6858개이고

두개의 시트로 나누면
Examples시트는 똑같이 6858개이고
Idioms시트는 중복되는 숙어를 제외하고 6709개이다



이것이 무슨 의미가 있는지를 모른다면 이 소루션을 만들면서 맛이 들도록 하자
물론 위와 같이 테이블을 분리하고 하지 않아도 안되는것은 아니다
잘된다..!!
그러나 우노싸이트를 사랑하시는 분들은 데이타를 보는 컨셉자체가
다른 사람들과는 틀려야 하니까!!
그런 의미에서 정보를 나누고,토막을 내고 부산을 떤다

억세스를 공부하고 싶으신 분이 아주 많다
억세스를 공부하기 전에 이런 관계형의 개념과 필요성을 알고 억세스에
접근하면 문제는 반은 풀고 넘어가게 되는것이다
이것을 모르고 접근하면 억세스를 억세스답게 활용할수 없다
위의 그림의 Get이라는 단어는 여러개의 문장을 갖고 있다
이 관계가 관계형테이블의 일대다(하나의 정보가 여러개의 정보를
자식들 같이 데리고 있는)의 관계를 유지하고 있다는 이야기다

또한 그동안은 여러장의 시트를 요약하여 한장의 시트로 만드는것은
많이 경험했어도 위와 같이 한장의 것을 여러장의 시트로
분산하면서 관련된 작업을 한 경험은 많지 않았을것이다
프로그래밍테크닉을 훈련하는 아주 좋은 예문이 될것이다
절대적필수,순환문의 요령을 훈련하고
변수의 적절한 활용을 훈련하자

순환을 하면서 하나의 시트에서 두개의 시트로
구분하여 하나는 이리 보내고 또 하나는 저리 보내고
그러다가 같은 숙어가 중복되게 나올때??
중복되는 숙어가 있는지 어떻게 알아보고..
중복되는 숙어가 걸렸을때 어떻게 교통정리를 해야 할지
수천개의 순환내용을 어느 중간에서(중복되는것을 만났을때)
구문을 디버깅해보고 싶을때 어느 순간에 멈추게 하는
방법은 무엇일까??
라는 내용을 해보도록 한다

Sub DivideSheet()
Dim shtIdioms As Worksheet
Dim shtExamples As Worksheet
Dim shtDatas As Worksheet
Dim rData As Range
Dim iDup As Integer
Dim iY As Integer
Dim iID As Integer
Dim iIdiomNext As Integer
Dim iExampleNext As Integer
Dim iNext As Integer
Dim iDataCount As Integer
Dim rCurrentCell As Range
Set shtDatas = Worksheets("Data")
Set shtIdioms = Worksheets.Add
Set shtExamples = Worksheets.Add
shtIdioms.Name = "Idioms"
shtExamples.Name = "Examples"
shtIdioms.Range("A1:C1") = Array("ID", "Idioms", "Meaning")
shtExamples.Range("A1:C1") = Array("Idiom_ID", "Examples", "Count")
Set rData = shtDatas.UsedRange.Columns(1).Offset(1)
Set rData = rData.Resize(rData.Rows.Count - 1)
iDataCount = rData.Cells.Count
For iNext = 1 To iDataCount
    Set rCurrentCell = rData.Cells(iNext)
    iID = iID + 1
    iDup = Application.CountIf(rData, rCurrentCell)
    For iY = 1 To iDup
        If iY = 1 Then
            With shtIdioms.Range("A2")
                .Offset(iIdiomNext).Value = iID
                .Offset(iIdiomNext, 1) = rCurrentCell
                .Offset(iIdiomNext, 2) = rCurrentCell.Offset(, 1)
            End With
            iIdiomNext = iIdiomNext + 1
        End If
        With shtExamples.Range("A2")
            .Offset(iExampleNext + iY - 1).Value = iID
            .Offset(iExampleNext + iY - 1, 1) = rCurrentCell.Offset(iY - 1, 2)
        End With
        If iY = iDup Then
            iExampleNext = iExampleNext + iDup
        End If
    Next
    iNext = iNext + iDup - 1
Next
End Sub

이제 DATA시트는 필요없어 진다
그런데 삭제하고 나면 맨위에 2번째화일에서 까지 보여준
숙어 찾아보기 기능은 말짱 헛것이 되겠네??!!!
맞다!!!
다음 파일부터 다시 만들어 나간다
어느 분은 이렇게 이야기 할수도 있을것이다
엑셀은 숫자를 다루는것인데 왜 이따위것만 하지??!!
이런 의문은 바보들이 하는 질문이다
세상의 모든것의 원리는 기본적인것으로 같이 통한다
기본을 알면 모든 분야의 응용은 각자의 몫인것이다
2007버전이 나온다고..또 2007버전을 배워야겠다..!!
그동안 배운것은 헛것이 아닌가??!!
이것 또한 바보같은 소리다
버전업은 점진적으로 기본의 틀에서 수정,추가 하여 나가는것이지
어느 쪼다들 같이 개혁한답시고 통째로 뒤집어 엎으려는
바보들은 세상에 없다
여러분이 갖추어 나가는 기본에서 확장 전개 발전되어가는것이다
기본에 충실하면 무서울것이 하나도 없다
기본에 충실하면 어떤 변화도 수용할수 있게 된다
문제는 기본을 다 알았다고 하지만 실은 기본을 모르면서
기본을 다 아는척..혹은 아는것으로 착각하고 살고 있을 뿐이다


English Idioms Book_003.