메뉴
해결 M365윈도우10

앞 단어의 받침 유무에 따라 잘못 사용된 (을/를) 검사 매크로 만들기 질문

7
12월 1일 조회 1,474
앞 글자에 받침이 있으면 '을', 없으면 '를'로 쓰이는데

잘못 사용된 곳을 검사할 수 있는 매크로를 만들려고 합니다.

계속 수정해 보고는 있습니다만, 어째서인지 매크로를 돌리면 글자가 사라지고 하는 현상 때문에

도저히 감이 안 잡혀서 고수 님들께 도움을 구하고자 합니다.

댓글 4

마법의손 12월 1일
삭제된 댓글입니다.
원조백수 채택된 답변 12월 1일
Sub CheckWordPP()
    Dim C As Range, vData As Variant, vError As Variant, i As Long, iCnt As Long
    
    For Each C In Selection
        iCnt = 0
        ReDim vError(1 To 1)
        vData = Split(Replace(Replace(C.Value2, chr(10), " "), ",", " "), " ")
        For i = LBound(vData) To UBound(vData)
            If (Right(vData(i), 1) = "을" And HasFC(Left(Right(vData(i), 2), 1)) = False) Or _
               (Right(vData(i), 1) = "를" And HasFC(Left(Right(vData(i), 2), 1)) = True) Then
                iCnt = iCnt + 1
                ReDim Preserve vError(1 To iCnt)
                vError(iCnt) = vData(i)
            End If
        Next i
        '// 검토할 부분에 색칠하기
        iCnt = 0
        For i = 1 To UBound(vError)
            iCnt = InStr(iCnt + 1, C.Value2, vError(i), vbTextCompare)
            C.Characters(iCnt, Len(vError(i))).Font.Color = vbRed
            C.Characters(iCnt, Len(vError(i))).Font.Bold = True
        Next i
        '// 검토할 단어를 옆에 나열하기
        C.Offset(, 1).Resize(1, UBound(vError) - LBound(vError) + 1) = vError
    Next C
    
End Sub

Function HasFC(Text As String)
    '// 종성을 가지고 있는지,,,
    '// 결과: 한글이 아니면 "", 받침있으면 True, 없으면 False
    Dim Uno As Long
    On Error Resume Next
    HasFC = "":   Uno = AscW(Left(Text, 1)) - &HAC00
    If Uno < 0 Or Uno > 11171 Then Else HasFC = (AscW(Left(Text, 1)) - &HAC00) Mod 28 > 0
End Function

 
7
777 작성자 12월 3일
@원조백수 님 헉... 정말 고수십니다.

만들어 주신 매크로, 정독하고 이해해보고 익히겠습니다.

감사합니다!
7
777 작성자 12월 9일
@원조백수 님 안녕하세요 선생님.

주신 매크로를 기반으로 은/는 이/가 도 적용하기 위해 코드를 수정하고

'이'가 아래처럼 작동할 때는 예외로 적용하게 하려 합니다.
  • 이 이상 좋게 줄 수 없다(대명사)
  • 이 사람(관형사)

그런데 '말하는 이'의 '이/가' 검사를 하면 적용이 안 되네요. 계속 생각해 봤습니다만

제 힘으로는 해결이 되지 않아 다시 여쭙게 되었습니다. 시간이 괜찮으시다면 검토해 주시면 감사드리겠습니다.

질문답변 게시판의 최근 글

스크랩 완료