Search Results for 'vba'

2 POSTS

  1. 2009.07.04 엑셀 VBA를 이용한 단어 암기장 (Part 2) (3)
  2. 2009.06.21 엑셀(VBA)로 단어/문장 암기장 만들기
 VBA 코드만 적어 놓은  이전 단어 암기장은 바로 실행되지 않는다. VBA에 능숙한 사람이라면 알아서 해결하겠지만, 몇 몇 분들이 문의를 주었고, 코드만 올려놓고 쓰라고 하는 것이 좀 성의가 없는 것 같아서 바로 사용 가능한 엑셀 파일을 공유해 본다.





 우선 해당 엑셀 파일을 실행하면 반드시 매크로를 사용할 수 있도록 해 주어야 한다. 그림의 (1)을 클릭하고 "이 콘텐츠 사용"을 선택한다. (오피스 2003의 경우도 유사함)

 사용 방법은 다음의 2단계로 나누어진다. 해당 파일을 열어보면 어렵지 않게 알 수 있으니, 간단히 설명하겠다.

  1. 그림과 같이 학습할 문장 혹은 단어를 만든다. 이 때, 문제로 만들 부분은 [] 로 묶어 준다.
    그리고 해답 칸(그림에서는 C2)에 ExtractAnswer 함수로 문제 칸을 지정한다.
    (위 그림에서 (2)참고)

  2. 이제 문제의 []를 지우면 된다. 이는 문제로 만들 부분을 선택하고(그림에서는 B2) ctrl+w 키를 누르면 자동으로 매크로가 실행되면서 [] 부분이 지워진다. 결과는 아래 그림을 참고한다


사실, 첨부된 엑셀을 열고 대강 복사해서 사용하면 된다. :)

요즘 일본어 공부를 다시 하고 있는데, 엑셀 암기장을 아주~ 유용하고 쓰고 있다. 근데, 만드는데 시간이 넘 많이 걸린 듯... (VBA는 군대 이후 처음이라 많이 가물가물 하였다.)
신고
 외국어 공부할 때 마구 외우기만 하면 된다고 생각하지는 않지만, 단기 기억 상실증에 고민하고 있는 사람이라면(--;) 자신이 공부한 부분을 적절한 주기로 반복해 줄 필요가 있다고 본다. 엑셀에서 VBA를 이용하여 암기장을 만드는, 나름의 방법을 공유해 본다. ( 글이 작성된 이후, 내용을 개선하여 엑셀 파일로 공유했다. http://nephilim.tistory.com/112)

 여기서 만들 엑셀을 이용한 암기장의 편리한 점은 외우고자 하는 내용을 아무 셀에나 입력하고 (그림에서 A2) 작성한 VBA함수를 호출하면 자동으로 문제와 답을 만들어 준다는 것이다.
 
  1. 아래 그림과 같이 영어 문장을 입력하고, 암기할 부분을 꺽인괄호[]로 감싸준다. 나중에 [] 부분은 보이지 않게 된다. 

  2. 해당 문제의 답을 표시할 칸에 사용자 정의 함수(ExtractAnswer)를 입력하고, 원문(A2)을 넘겨준다.  

  3. 위 그림과 같이 문제가 들어있는 셀(A2)은 [] 내의 부분이 보이지 않게 되면서, 해당 문제의 답이 정답 셀(B2)에 쉼표로 분리되어 나타나게 된다.

ExtractAnswer라는 함수는 사용자 정의 함수로서, VBA로 작성하여야 한다. 해당 소스는 아래와 같다.

 Public Function ExtractAnswer(rngTarget As Range) As String
    Dim iStart As Integer, iLength As Integer, iEnd As Integer
    Dim rngEachCell As Range
    Dim strReturn As String, strWordBetweenBrace
       
    '전달된 Range의 각 셀에 대하여 작업을 진행함
    For Each rngEachCell In rngTarget
        iStart = 1
        iEnd = 1
        strReturn = ""

        '[]가 발견되지 않을 때 까지 반복
        Do
            iStart = InStr(iStart, rngEachCell, "[")
            iEnd = InStr(iEnd, rngEachCell, "]")
            iLength = iEnd - iStart - 1
                               
                If ((iStart > 0) And (iEnd > 0)) Then
                    iStart = iStart + 1
                    iEnd = iEnd + 1
                   
                    '[]사이의 문자열을 추출함
                    strWordBetweenBrace = Mid(rngEachCell, iStart, iLength)
                   
                    '추출한 문자열을 (복수개일경우) 쉼표(,)로 구분하여 연결함
                    If (Len(strReturn) > 0) Then
                        strReturn = strReturn & ", " & strWordBetweenBrace
                    Else
                        strReturn = strWordBetweenBrace
                    End If
                   
                    '원본 문자열의 []사이의 문자를 흰색으로 바꾸어 안보이게 함
                    rngEachCell.Characters(iStart, iLength).Font.Color = RGB(255, 255, 255)
                Else
                    Exit Do
                End If
        Loop
    Next rngEachCell
   
    ExtractAnswer = strReturn
End Function

VBA의 실행은 엑셀의 설정에 따라 보안 경고를 나타내거나 아예 실행이 안될 수 있다. 이럴 경우 엑셀 옵션 > 보안 센터 > 보안 센터 설정 > 매크로 설정에서 매크로가 실행될 수 있도록 설정을 바꾸어주어야 한다. (필자는 '모든 매크로 제외(알림표시)'로 설정하여 아래와 같이 경고 알림이 뜨게 했다.)


참고로, 필자가 사용하는 일본어 암기 Sheet의 예이다.


신고

티스토리 툴바