Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Некорректно работают функции UNICHAR и UNICODE - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Некорректно работают функции UNICHAR и UNICODE
Shakal07 Дата: Четверг, 29.05.2025, 20:18 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 0% ±

Excel 2k3;2k7;2k10;2k13;2k19
Здравствуйте

Имею пользовательские функции (Excel 2010), UNICHAR и UNICODE.
Но они работают не полностью.
К примеру, функция UNICHAR работает только по число 65535, а функция UNICODE отображает код символа, только если его значение не превышает 65535.
Кроме того, функция UNICODE возвращает результат в виде текстового значения.
К примеру, мне необходимо получить коды таких символов (смотрите картинку вложениє), но сожалению пользовательская функция выдает одинаковое для всех указанных символов значение "-10240"
Тогда как встроенная функция в новіе версии EXCEL справляется с этим на ура.
Как вылечить пользовательские функции, чтобы обрабатывали весь диапазон юникода.

[vba]
Код

Function UNICHAR(Число As Long) As String
' Возвращает символ с заданым кодом
  UNICHAR = ChrW(Число)
End Function

Function UNICODE(Текст As String) As String
' Возвращает числовой код первого символа в текстовой строке
  UNICODE = AscW(Текст)
End Function
[/vba]

Помогите исправить

С уважением
К сообщению приложен файл: 2528945.png (17.7 Kb)


Сообщение отредактировал Shakal07 - Пятница, 30.05.2025, 09:02
 
Ответить
СообщениеЗдравствуйте

Имею пользовательские функции (Excel 2010), UNICHAR и UNICODE.
Но они работают не полностью.
К примеру, функция UNICHAR работает только по число 65535, а функция UNICODE отображает код символа, только если его значение не превышает 65535.
Кроме того, функция UNICODE возвращает результат в виде текстового значения.
К примеру, мне необходимо получить коды таких символов (смотрите картинку вложениє), но сожалению пользовательская функция выдает одинаковое для всех указанных символов значение "-10240"
Тогда как встроенная функция в новіе версии EXCEL справляется с этим на ура.
Как вылечить пользовательские функции, чтобы обрабатывали весь диапазон юникода.

[vba]
Код

Function UNICHAR(Число As Long) As String
' Возвращает символ с заданым кодом
  UNICHAR = ChrW(Число)
End Function

Function UNICODE(Текст As String) As String
' Возвращает числовой код первого символа в текстовой строке
  UNICODE = AscW(Текст)
End Function
[/vba]

Помогите исправить

С уважением

Автор - Shakal07
Дата добавления - 29.05.2025 в 20:18
прохожий2019 Дата: Пятница, 30.05.2025, 20:25 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1395
Репутация: 364 ±
Замечаний: 0% ±

365 Beta Channel
[vba]
Код
Private Const d1 = 65536, d2 = 55296, d3 = 56320, d4 = 1024

Function UCode&(s$)
    If Len(s) = 1 Then UCode = cor(s): Exit Function
    f = cor(Mid(s, 1)): l = cor(Mid(s, 2))
    UCode = tr(f, l, d1 + (f - d2) * d4 + (l - d3), f)
End Function

Function UChar$(d&)
    If d < d1 Then UChar = ChrW(d): Exit Function
    a = d - d1: f = d2 + a \ d4: l = d3 + a Mod d4
    UChar = tr(f, l, ChrW(f) & ChrW(l), "")
End Function

Private Function cor&(x$)
    z = AscW(x): cor = z + IIf(z < 0, d1, 0)
End Function

Private Function tr(x, y, z, w)
  tr = IIf(x >= d2 And x < d3 And y >= d3 And y <= 57343, z, w)
End Function
[/vba]
К сообщению приложен файл: 4603235.png (6.7 Kb)


Сообщение отредактировал прохожий2019 - Суббота, 31.05.2025, 00:46
 
Ответить
Сообщение[vba]
Код
Private Const d1 = 65536, d2 = 55296, d3 = 56320, d4 = 1024

Function UCode&(s$)
    If Len(s) = 1 Then UCode = cor(s): Exit Function
    f = cor(Mid(s, 1)): l = cor(Mid(s, 2))
    UCode = tr(f, l, d1 + (f - d2) * d4 + (l - d3), f)
End Function

Function UChar$(d&)
    If d < d1 Then UChar = ChrW(d): Exit Function
    a = d - d1: f = d2 + a \ d4: l = d3 + a Mod d4
    UChar = tr(f, l, ChrW(f) & ChrW(l), "")
End Function

Private Function cor&(x$)
    z = AscW(x): cor = z + IIf(z < 0, d1, 0)
End Function

Private Function tr(x, y, z, w)
  tr = IIf(x >= d2 And x < d3 And y >= d3 And y <= 57343, z, w)
End Function
[/vba]

Автор - прохожий2019
Дата добавления - 30.05.2025 в 20:25
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!