VBA에서 이모티콘 💖
유니 코드의 화려한 이모티콘을 사용하고 싶습니다.
매년 6월의 연례 릴리스가 되고 있는 Unicode입니다만, 2017년 시점의 최신판은 10.0입니다. 6.0 이후는 완전히 이모티콘이 주요 테마가 되고 있는 인상. 어지럽게 추가되므로 따라갈 수 없습니다.
오늘은 VBA에서 최신 이모티콘을 사용합시다! 라는 테마입니다.
여러분이 잘 알고 있듯이 VBA의 개발 환경은 아직 유니코드 기반이 아니므로 에디터 내에서 유니코드 문자열 리터럴을 처리할 수 없으며 디버거에서 이모티콘을 표시할 수도 없습니다.
하지만 셀이나 텍스트 상자에 이모티콘을 입력하여 표시할 수 있습니다.
Windows의 경우, Segoe UI Emoji라는 전용의 폰트가 있어, 컬러 글리프도 가지고 있습니다만, 불행히도 현행 Excel(2016)에서는 컬러 글리프는 표시할 수 없습니다.
동일한 Office 2016 응용 프로그램에서 Word 2016은 색상 글리프를 지원합니다.
← Word 2016에서는 컬러 표시
← Excel 2016에서는 흑백 표시
위에는 자연스럽게 표시했지만, 유니 코드 이모티콘은 복잡한 사양을 가지고 있으며 왼쪽 이모티콘은 UCS4에서 u + 1f600이라는 코드의 한 문자 (UTF-16에서 2 단어, UTF-8에서는 4 아르바이트)로 나타내고, 오른쪽의 가족(엄마 두 사람과 소년 2명)은 UCS4에서 u+1f469, u+1f469, u+1f466, u+1f466의 4문자를 zwj로 접속한 합자(UTF-16에서 7워드, UTF-8에서는 25바이트)라고 하는, 대단한 문자가 되어 있습니다.
이런 이모티콘에서도 Windows 10이나 Mac OS X을 비롯하여 iOS 8 이상이나 Android 7.0 이상에서는 제대로 표시됩니다! 😀👩👩👦👦 ← 자, 볼 수 있겠지요! ?
Excel에서 이모티콘을 입력하려면
이제 이러한 문자를 입력하기 위해 Excel에서는 삽입 탭의 기호 및 특수 문자에서 입력할 수 있습니다. 이모티콘의 경우에도 Segoe UI Emoji 글꼴을 선택하고 목록에서 입력할 수 있습니다.
하지만 여기에서 선택하는 것은 굉장히 번거로운 게다가, 일람에는 합자에 의한 이모티콘은 나오지 않습니다.
VBA에서 이모티콘 사용
앞두기가 길어졌지만 거기서 유니 코드 테이블에서 직접 이모티콘 문자열을 생성하는 VBA 코드를 만들었습니다.
emoji.xlsm' 可変引数で16進文字コードの文字列を渡す
' 例: UCS4String("1f600", "1f469", "200d", "1f469", "200d", "1f466", "200d", "1f466")
Function UCS4String(ParamArray codes() As Variant) As String
Dim i As Integer
UCS4String = ""
For i = LBound(codes) To UBound(codes)
Dim c As Long
If TypeName(codes(i)) = "String" Then
c = "&H" & codes(i)
Else
c = CLng(codes(i))
End If
If c > 65535 Then
c = c - &H10000
UCS4String = UCS4String & ChrW(&HD800 + Int(c / &H400)) & ChrW(&HDC00 + CInt(c And &H3FF))
Else
UCS4String = UCS4String & ChrW(c)
End If
Next
End Function
유니코드 이모티콘 코드 표 에 있는 숫자를 직접 건네주면 사용할 수 있습니다.
셀의 16진수 코드를 이모티콘으로 변환
단순히 셀의 내용에 이모티콘을 넣고 싶은 경우에도 사용합시다! 그래서 선택 범위를 변환하는 코드도 써 둡니다.
emoji2.xlsm' 選択されているセルに書かれた文字コードをUnicode文字に変換する
' セルの中身は16進数を空白で区切ったもの
' Unicodeの絵文字コード表(http://unicode.org/emoji/charts/full-emoji-list.html)
' からコピペしてもOK
' 例: U+1F468 U+1F3FB U+200D U+2708 U+FE0F
Sub ConvertUCS4()
For i = 1 To Selection.Areas.Count
Dim r As Range
Set r = Selection.Areas(i)
For j = 1 To r.Rows.Count
For k = 1 To r.Columns.Count
Dim els() As String, str As String
With r.Cells(j, k)
els = Split(.Value, " ")
str = ""
For l = LBound(els) To UBound(els)
If Len(els(l)) > 1 Then ' 実質中身がない空白部はスキップ
' u+xxxx形式の場合はu+部分を削除
If LCase(Left(els(l), 2)) = "u+" Then els(l) = Mid(els(l), 3)
str = str & UCS4String(els(l))
End If
Next
.Value = str
End With
Next
Next
Next
End Sub
Reference
이 문제에 관하여(VBA에서 이모티콘 💖), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/masaoki/items/3488320842a9c3f9fc4e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이제 이러한 문자를 입력하기 위해 Excel에서는 삽입 탭의 기호 및 특수 문자에서 입력할 수 있습니다. 이모티콘의 경우에도 Segoe UI Emoji 글꼴을 선택하고 목록에서 입력할 수 있습니다.
하지만 여기에서 선택하는 것은 굉장히 번거로운 게다가, 일람에는 합자에 의한 이모티콘은 나오지 않습니다.
VBA에서 이모티콘 사용
앞두기가 길어졌지만 거기서 유니 코드 테이블에서 직접 이모티콘 문자열을 생성하는 VBA 코드를 만들었습니다.
emoji.xlsm' 可変引数で16進文字コードの文字列を渡す
' 例: UCS4String("1f600", "1f469", "200d", "1f469", "200d", "1f466", "200d", "1f466")
Function UCS4String(ParamArray codes() As Variant) As String
Dim i As Integer
UCS4String = ""
For i = LBound(codes) To UBound(codes)
Dim c As Long
If TypeName(codes(i)) = "String" Then
c = "&H" & codes(i)
Else
c = CLng(codes(i))
End If
If c > 65535 Then
c = c - &H10000
UCS4String = UCS4String & ChrW(&HD800 + Int(c / &H400)) & ChrW(&HDC00 + CInt(c And &H3FF))
Else
UCS4String = UCS4String & ChrW(c)
End If
Next
End Function
유니코드 이모티콘 코드 표 에 있는 숫자를 직접 건네주면 사용할 수 있습니다.
셀의 16진수 코드를 이모티콘으로 변환
단순히 셀의 내용에 이모티콘을 넣고 싶은 경우에도 사용합시다! 그래서 선택 범위를 변환하는 코드도 써 둡니다.
emoji2.xlsm' 選択されているセルに書かれた文字コードをUnicode文字に変換する
' セルの中身は16進数を空白で区切ったもの
' Unicodeの絵文字コード表(http://unicode.org/emoji/charts/full-emoji-list.html)
' からコピペしてもOK
' 例: U+1F468 U+1F3FB U+200D U+2708 U+FE0F
Sub ConvertUCS4()
For i = 1 To Selection.Areas.Count
Dim r As Range
Set r = Selection.Areas(i)
For j = 1 To r.Rows.Count
For k = 1 To r.Columns.Count
Dim els() As String, str As String
With r.Cells(j, k)
els = Split(.Value, " ")
str = ""
For l = LBound(els) To UBound(els)
If Len(els(l)) > 1 Then ' 実質中身がない空白部はスキップ
' u+xxxx形式の場合はu+部分を削除
If LCase(Left(els(l), 2)) = "u+" Then els(l) = Mid(els(l), 3)
str = str & UCS4String(els(l))
End If
Next
.Value = str
End With
Next
Next
Next
End Sub
Reference
이 문제에 관하여(VBA에서 이모티콘 💖), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/masaoki/items/3488320842a9c3f9fc4e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
' 可変引数で16進文字コードの文字列を渡す
' 例: UCS4String("1f600", "1f469", "200d", "1f469", "200d", "1f466", "200d", "1f466")
Function UCS4String(ParamArray codes() As Variant) As String
Dim i As Integer
UCS4String = ""
For i = LBound(codes) To UBound(codes)
Dim c As Long
If TypeName(codes(i)) = "String" Then
c = "&H" & codes(i)
Else
c = CLng(codes(i))
End If
If c > 65535 Then
c = c - &H10000
UCS4String = UCS4String & ChrW(&HD800 + Int(c / &H400)) & ChrW(&HDC00 + CInt(c And &H3FF))
Else
UCS4String = UCS4String & ChrW(c)
End If
Next
End Function
단순히 셀의 내용에 이모티콘을 넣고 싶은 경우에도 사용합시다! 그래서 선택 범위를 변환하는 코드도 써 둡니다.
emoji2.xlsm
' 選択されているセルに書かれた文字コードをUnicode文字に変換する
' セルの中身は16進数を空白で区切ったもの
' Unicodeの絵文字コード表(http://unicode.org/emoji/charts/full-emoji-list.html)
' からコピペしてもOK
' 例: U+1F468 U+1F3FB U+200D U+2708 U+FE0F
Sub ConvertUCS4()
For i = 1 To Selection.Areas.Count
Dim r As Range
Set r = Selection.Areas(i)
For j = 1 To r.Rows.Count
For k = 1 To r.Columns.Count
Dim els() As String, str As String
With r.Cells(j, k)
els = Split(.Value, " ")
str = ""
For l = LBound(els) To UBound(els)
If Len(els(l)) > 1 Then ' 実質中身がない空白部はスキップ
' u+xxxx形式の場合はu+部分を削除
If LCase(Left(els(l), 2)) = "u+" Then els(l) = Mid(els(l), 3)
str = str & UCS4String(els(l))
End If
Next
.Value = str
End With
Next
Next
Next
End Sub
Reference
이 문제에 관하여(VBA에서 이모티콘 💖), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masaoki/items/3488320842a9c3f9fc4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)