MS Excel пользовательская функция Unicode - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть список символов IPA, таких как следующие в столбце в моем файле Excel:

a
ɒ
ɒ̃
ɑː
æ
aɪ
aʊ
aʊə
b
ɔː

Я использовал функцию Unicode, чтобы получить значение для каждого символа. Это работает только для отдельных символов, поэтому я пытаюсь написать пользовательскую функцию, которая будет возвращать значение для каждого символа, разделенного символом.

Однако функция не распознает некоторые (не алфавитные) символы, такие как ɒ̃ и æ.

Кто-нибудь знает, что я делаю неправильно?

Я вставил следующий код:

Public Function UnicodeText(text2convert As String)
Dim textLen As Integer
UnicodeText = ""
textLen = Len(text2convert)

If Len(text2convert) = 1 Then
    UnicodeText = Asc(text2convert)
Else
    For i = 1 To textLen
        If i = 1 Then
           UnicodeText = UnicodeText & Asc(Left(text2convert, 1)) & "."
        Else
           If i = textLen Then
              UnicodeText = UnicodeText & Asc(Right(text2convert, 1))
           Else
              UnicodeText = UnicodeText & Asc(Mid(text2convert, i, 1)) & "."
           End If
       End If
 Next i

End If

End Function

Кроме того, он распознает символ ɒ̃ как имеющий длину 2

Причина, по которой это делается, заключается в том, чтобы убедиться, что все используемые символы совпадают с некоторыми символами, такими как ɡ и g, в некоторых шрифтах выглядят одинаково, но на самом деле это два разных символа.

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

CHAR (CODE) против UNICHAR (UNICODE)

Здесь нет решения. Это просто визуальная интерпретация того, что здесь происходит. Он показывает «преобразование» столбцов AC с CODE в столбцы EFG и с UNICODE в столбцы HIJ, а затем обратно с CHAR в столбцы KLM и UNICHAR в столбцы NOP. Столбец Q представляет результаты функции OP, в то время как столбцы RS представляют результаты решения Джона Розенфельда. Ниже я добавил критические символы из моего языка.

enter image description here

1 голос
/ 27 апреля 2020

Если я понимаю, что вы хотите сделать правильно, вы можете использовать функцию AscW. Функция AscW возвращает символ Unicode для строки.

Вы можете либо заменить Asc в своем коде на AscW, либо использовать следующий код:

Option Explicit
Function uni(S As String) As String
    Dim I As Long
    Dim sTemp As String

sTemp = ""
For I = 1 To Len(S)
    sTemp = sTemp & "." & AscW(Mid(S, I, 1))
Next I

uni = Mid(sTemp, 2)

End Function

enter image description here

Кстати, если у вас есть O365 с функциями TEXTJOIN и SEQUENCE, вы можете использовать эту формулу рабочего листа:

=TEXTJOIN(".",TRUE,UNICODE(MID(A1,SEQUENCE(LEN(A1)),1)))

Если у вас есть TEXTJOIN, но не функция SEQUENCE, вы можете заменить вызов функции SEQUENCE на ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1)))

=TEXTJOIN(".",TRUE,UNICODE(MID(A1,ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1))),1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...