Эмодзи на VBA
🌰 Используем суррогатные пары для отображения символов с кодами > 65535 🐱
Функция ChrW(код) не работает для символов с кодом более 65535. Как же отобразить в документе, например,  символ 🐱 с кодом 0x1F431 (128049)?
Такие символы мы можем закодировать двумя кодовыми единицами. Пара таких кодов называется суррогатной парой юникода.
Первая кодовая единица суррогатной пары всегда находится в диапазоне от 0xD800 до 0xDBFF и называется верхней частью пары.
Вторая кодовая единица суррогатной пары всегда находится в диапазоне от 0xDC00 до 0xDFFF и называется нижней частью пары.
Обратите внимание, что суррогатная пара представляет только один символ.
Для вычисления этих кодов используются следующие формулы (в excel vba):
Type SurrogatePair
    lo As Long
    hi As Long
End TypeFunction Code2pair(codepoint As Long) As SurrogatePair
' Расчёт суррогатной пары UTF-16
    Dim sp As SurrogatePair
    sp.hi = WorksheetFunction.Floor((codepoint - &H10000) / &H400, 1) + &HD800
    sp.lo = (codepoint - &H10000) Mod &H400 + &HDC00
    Code2pair = sp
End FunctionТеперь можно написать функцию, которая выведет нужный символ по его коду с помощью суррогатной пары:
Function Rune(codepoint As Long) As String
' Вывод символа с указанным кодом
    Dim sp As SurrogatePair
    sp = Code2pair(codepoint)
    Rune = ChrW(sp.hi) & ChrW(sp.lo)
End FunctionУстановим нужный шрифт и размер, после чего потренируемся на кошках:
Помните, что сложные эмодзи могут состоять из нескольких подряд идущих символов юникода, но не все системы могут правильно это отобразить.