Excel - VBA

Excel에서 원숫자를 50번까지 입력하기 (feat. 자동고침옵션)

EGTools 2023. 4. 17. 12:30
728x90

원문자를 한글 윈도우 체계에서는 1부터 15까지(① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮) 지원합니다.

16이상의 원숫자는 유니코드에서 입력해야 하는데, Excel에서는 아래와 같은 방법으로 할 수 있습니다.

⑯ ⑰ ⑱ ⑲ ⑳㉑ ㉒ ㉓ ㉔ ㉕ ㉖ ㉗ ㉘ ㉙ ㉚ ㉛ ㉜ ㉝ ㉞ ㉟ ㊱ ㊲ ㊳ ㊴ ㊵ ㊶ ㊷ ㊸ ㊹ ㊺ ㊻ ㊼ ㊽ ㊾ ㊿

 

1. 우선 입력할 셀의 폰트를 유니코드를 지원하는 "나눔고딕" 같은 것으로 지정합니다.

    나눔폰트는 네이버에서 무료로 제공하고 있고, 상업적 이용도 가능합니다.

 

2. UNICHAR()함수를 이용하여 유니코드를 입력합니다.

    UniChar함수는 십진수를 사용해야 하므로 아래와 같이 검토합니다.

    원문자 16 은 16진수 "246F"에 해당하는 9327이므로 아래와 같은 수식으로 입력합니다.

   = UniChar(9327)

   = UniChar( HEX2DEC("246F") ) 

 

3. 원숫자별 유니코드 범위는 아래 표를 참고하세요.

원숫자 범위 16진수 범위 10진수 범위 비    고
1 ~ 20 2460 ~ 2473 9312 ~ 9331 1~15는 한글자모중 ㅇ을 입력하고 [한자]키를 누르면 입력할 수 있음
21 ~ 35 3251 ~ 325F 12881 ~ 12895
36 ~ 50 32B1 ~ 32BF 12977 ~ 12991

 

4. 자동고침 옵션에 추가해 두면 쉽게 입력이 가능합니다.

   [ 파일 - 옵션 ] 메뉴에서 왼쪽 "언어 교정" 탭을 선택하고

   오른쪽 [자동 고침 옵션] 버튼의 팝업창 첫번째 탭 "자동 고침"에 입력->결과로 입력

   예)  입력: ((16)) ,  결과 : ⑯

 

5. 귀찮으니 자동으로 등록하는 매크로를 만들어 둡니다.

Sub AutoCorrectListManage()
''//////////////////////////////////////////////////////////////////////////////////////////
''//
''// Macro     : AutoCorrectListManage, 자동고침 목록관리
''// Describe  : 자동고침 옵션의 목록을 자동으로 추가/수정/삭제
''// Version   : 1.1
''// Author    : EGTools (egexcelvba@gmail.com)
''// Date      : 2023-04-19
''// License   : MIT License
''// Remarks   :
''//   A열에 입력, B열에 결과를 넣습니다.
''//   1행은 제목으로 사용하고 2행부터 자동고침 목록을 입력
''//   A열과 B열에 내용이 있으면 목록에 추가하거나, 같은 입력이 있으면 결과를 수정
''//   A열에 내용이 있고, B열에는 없으면 입력이 같은 것을 삭제
''//   A열에 내용이 없고, B열에는 있으면 결과가 같은 것을 삭제
''//
''//////////////////////////////////////////////////////////////////////////////////////////

    Dim vList As Variant, vData As Variant, oDict As Object, r As Long, c As Long, x As Long, y As Long
    
    If ActiveSheet.Range("A1") <> "입력(From)" Or ActiveSheet.Range("B1") <> "결과(To)" Then Exit Sub
    
    Set oDict = CreateObject("Scripting.Dictionary")
    vList = Application.AutoCorrect.ReplacementList
    x = LBound(vList, 2)
    For y = LBound(vList, 1) To UBound(vList, 1)
        oDict(vList(y, x)) = vList(y, x + 1)
    Next y
    
    ActiveSheet.AutoFilterMode = False
    r = Cells(Rows.Count, 1).End(xlUp).Row
    ''// From 목록이 없는 경우에는 To목록으로 확인
    If r = 1 Then r = Cells(Rows.Count, 2).End(xlUp).Row
    ''// To도 없으면 종료
    If r = 1 Then Exit Sub
    
    ''// 관리 대상 목록을 배열로 처리
    vData = Range("A2:B" & r).Value2
    c = LBound(vData, 2)
    For r = LBound(vData, 1) To UBound(vData, 1)
        If vData(r, c) = "" And vData(r, c + 1) <> "" Then
        ''// From이 없으면 To를 찾아서 모두 지운다
            For y = LBound(vList, 1) To UBound(vList, 1)
                If vList(y, x + 1) = vData(r, c + 1) Then Application.AutoCorrect.DeleteReplacement (vList(y, x))
            Next y
        ElseIf vData(r, c) <> "" Then
        ''// From이 기존 목록에 있으면 지우고, To값이 있으면 다시 등록
            If oDict.exists(vData(r, c)) Then Application.AutoCorrect.DeleteReplacement (vData(r, c))
            If vData(r, c + 1) <> "" Then Application.AutoCorrect.AddReplacement vData(r, c), vData(r, c + 1)
        End If
    Next r
    
    MsgBox "자동고침 목록이 수정되었습니다."
    
End Sub

 

6. 기존의 자동고침 옵션을 출력도 해 보자

Sub PrintAutoCorrectList()
''//////////////////////////////////////////////////////////////////////////////////////////
''//
''// Macro     : PrintAutoCorrectList, 자동고침 목록 출력
''// Describe  : 자동고침에 등록된 모든 목록을 "자동고침옵션" 시트에 출력함
''// Version   : 1.0
''// Author    : EGTools (egexcelvba@gmail.com)
''// Date      : 2023-04-19
''// License   : MIT License
''// Remarks   :
''//   "자동고침옵션"시트가 없으면 새로 추가하여 목록을 출력함
''//
''//////////////////////////////////////////////////////////////////////////////////////////
    Dim sh As Worksheet
    Dim vList As Variant, iLastRow As Long
    
    Set sh = getSheet("자동고침옵션", True)
    sh.Range("A1:B1") = Array("입력(From)", "결과(To)")
    iLastRow = sh.Cells(sh.Rows.Count, 1).End(xlUp).Row
    If iLastRow > 1 Then sh.Range("A2:A" & iLastRow).EntireRow.Delete xlUp
        
    vList = Application.AutoCorrect.ReplacementList
    sh.Range("A2").Resize(UBound(vList, 1) - LBound(vList, 1) + 1, UBound(vList, 2) - LBound(vList, 2) + 1) = vList
    sh.Activate
    sh.Range("A2").Activate
    ActiveWindow.FreezePanes = True
    
End Sub

Public Function getSheet(sheet_name As String, Optional Make_New As Boolean = False, Optional Wb As Workbook)
''//////////////////////////////////////////////////////////////////////////////////////////
''//
''// Function  : getSheet
''// Describe  : 시트이름으로 시트를 설정하거나, 새로 만들어 줌
''// Version   : 1.0
''// Author    : EGTools (egexcelvba@gmail.com)
''// Date      : 2021-12-12
''// License   : MIT License
''// Remarks   :
''//   Make_New를 True로 지정하면 찾는 이름의 시트가 없으면 새로 추가함
''//   wb을 지정하지 않으면 현재 사용중인 Workbook을 대상으로 작업함
''//
''//////////////////////////////////////////////////////////////////////////////////////////
    Dim sh As Worksheet
    If IsMissing(Wb) Or Wb Is Nothing Then Set Wb = ActiveWorkbook
    For Each sh In Wb.Worksheets
        If UCase(sh.Name) = UCase(sheet_name) Then
            Set getSheet = sh
            Exit Function
        End If
    Next
    
    Set getSheet = Nothing
    If Make_New = False Then Exit Function

    Set sh = Wb.Worksheets.Add
    sh.Name = sheet_name
    Set getSheet = sh

End Function

 

예제 파일은 이걸 참고하세요.

자동고침옵션목록관리.xlsm
0.06MB

728x90