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
예제 파일은 이걸 참고하세요.
728x90
'Excel - VBA' 카테고리의 다른 글
DatePicker 만들기 - 2 (레이블을 이용한 Calendar 날짜 정리) (0) | 2023.05.05 |
---|---|
DatePicker 만들기 - 1 (Calendar용 User Form 준비) (0) | 2023.05.05 |
Selenium Basic 사용중 Unexpected Alert Open Error (0) | 2023.03.28 |
표준시간을 얻어 오는 함수 (0) | 2023.03.27 |
샘플링 검사 (KS Q ISO 2859-1) 1회 샘플링 함수 만들기 (0) | 2023.03.20 |