VB(A)

이름을 자음 모음으로 분리하기

당근쨈 2015. 2. 22. 20:56

이름을 받고, 열번호를 받아서 그에 맞는 숫자를 입력하는 매크로

자음, 모음만 분리하면 어렵지 않은 문제다.

게다가 자음, 모음 분리하는 매크로가 인터넷에 있어서 쉽게 푼 문제.


Function fnName(num As Integer, inName As String)
 
    Dim 초성 As Variant, 중성 As Variant, 종성 As Variant
    Dim vR() As Variant
    Dim i As Integer, j As Integer, n As Long, k1 As Integer, k2 As Integer, k3 As Integer
    Dim endJoin As String
    Dim rngName As Range
    
    초성 = Array("ㄱ""ㄲ""ㄴ""ㄷ""ㄸ""ㄹ""ㅁ""ㅂ""ㅃ""ㅅ""ㅆ""ㅇ""ㅈ""ㅉ""ㅊ""ㅋ""ㅌ""ㅍ""ㅎ")
    중성 = Array("ㅏ""ㅐ""ㅑ""ㅒ""ㅓ""ㅔ""ㅕ""ㅖ""ㅗ""ㅘ""ㅙ""ㅚ""ㅛ""ㅜ""ㅝ""ㅞ""ㅟ""ㅠ""ㅡ""ㅢ""ㅣ")
    종성 = Array("""ㄱ""ㄲ""ㄳ""ㄴ""ㄵ""ㄶ""ㄷ""ㄹ""ㄺ""ㄻ""ㄼ""ㄽ""ㄾ""ㄿ""ㅀ""ㅁ""ㅂ""ㅄ""ㅅ""ㅆ""ㅇ""ㅈ""ㅊ""ㅋ""ㅌ""ㅍ""ㅎ")
    
    For i = 1 To Len(inName)
        If Mid(inName, i, 1) Like "[가-힇]" Then
            n = AscW(Mid(inName, i, 1)) + 21504
            k1 = Int(n / (21 * 28))
            k2 = Int((n Mod 21 * 28/ 28)
            k3 = n Mod 28
            j = j + 1
            ReDim Preserve vR(1 To j)
            vR(j) = 초성(k1) & 중성(k2) & 종성(k3)
        End If
    Next i
    
    '분리된 자,모음에 들어간 띄어쓰기 없애며 Join
    endJoin = Replace(Join(vR), " """)
    
    'A열 정의
    With Range("A2")
        Set rngName = Range(.Cells, .End(xlDown))
    End With
    
    '자,모와 일치하는 값 찾기
    j = 1
    For i = 1 To Len(endJoin)
        ReDim Preserve vR(1 To j)
        vR(j) = rngName.Find(Mid(endJoin, i, 1)).Offset(, num + 1).Value
        j = j + 1
    Next i
    
    fnName = Replace(Join(vR), " """)
    
End Function
cs



Book1.xlsm