web-dev-qa-db-ja.com

UnicodeコードポイントをExcelスプレッドシートの対応する文字に変換する

CHAR()関数を使用して、拡張ASCII値を文字に変換します。Unicodeコードポイントを文字に変換するには何を使用しますか?

ヘブライ語変換チャートを作成しています。たとえば、 コードポイント1489(U + 05D1) は文字「ベット」です。 A列に1489あり、B列にベットを表示したい。

7
NealWalters

今日、この小さな問題に遭遇したので、ここに更新があります:

Excel 201は、10進表記で与えられたUnicode値の文字を返す関数UNICHAR()を導入しました。関数UNICODE()は逆の働きをし、文字のUnicode値を返します。これは、Office for Mac 2011を含む以前のバージョンのExcelでは使用できません。

しかし、まったく同じ機能が現在のバージョンのオープンソースソフトウェアLibreOffice Calcで利用できます(そしてOpenOffice Calcだと思います)。

たとえば、16進数のUnicode値(「U +」なし)を含む長い列「A」があり、列「B」に文字が必要な場合。 UNICHARは10進値を必要とするため、式の変換関数HEX2DEC()と組み合わせます。したがって、セルB1に次の式を入力します。

=UNICHAR (HEX2DEC ($A1))

または、値がすでに10進数形式である場合:

=UNICHAR ($A1)

B1の下のすべてのセルに数式を適用するには、強調表示されたセルフレームの左下隅にある小さなハンドルをダブルクリックします(CalcおよびExcelで機能します)。 MS Arial Unicode(「通常の」Arialではない)など、できるだけ多くのUnicodeグリフをカバーするフォントで列をフォーマットします。それでおしまい。

(セルが結果ではなく数式自体を表示するという問題が発生する可能性があります。この場合、列はコンテンツタイプ「テキスト」または「一般」にフォーマットする必要があります。)

PS:

Apple Numbers ’09では、CHAR()はUnicode値で機能します。式は次のとおりです。

=CHAR (HEX2DEC(A))

または

=CHAR (A)
3
TehMacDawg

補足キャラクターを作成する必要がある人のために明確にするために:

  1. Excel 2013以降では、UNICHAR()関数( TehMacDawgの回答 に示されている)がこれを適切に処理します。目的のUnicodeコードポイントを渡すだけです。

    =UNICHAR(128126)
    

    生成する必要があります:????(U + 1F47E)

  2. 2013より前のExcelでは、 stema's answer に示されている関数が適切な出発点ですが、ChrW VB関数はBMPコードポイント(つまり値0-65,535/0xFFFF)。補助文字の作成は可能ですが、サロゲートペアの両方のコードユニットを生成するには、関数を2回呼び出す必要があります。

    =CONCATENATE(Unicode(55357), Unicode(56446))
    

    生成されます:????(U + 1F47E)

    これは少し扱いに​​くいので、stemaのコードを次のように変更しました。これにより、コードポイント/ UTF-32値がUTF-16サロゲートペアに変換されます。

    Function UnicodeFromInt(val As Long)
        If val < 0 Or val > 1114111 Then
            UnicodeFromInt = "ERROR: value must be between 0 and 1114111!!"
            GoTo GetOut
        End If
    
        If val >= 55296 And val <= 57343 Then
            UnicodeFromInt = "ERROR: surrogate code points are not displayable!!"
            GoTo GetOut
        End If
    
    
        If val < 65536 Then
            UnicodeFromInt = ChrW(val)
        Else
            UnicodeFromInt = ChrW(55232 + Int(val / 1024)) & ChrW(56320 + Int(val Mod 1024))
        End If
    
    GetOut:
    End Function
    
    Function UnicodeFromHex(val As String)
        UnicodeFromHex = UnicodeFromInt("&H" & val)
    End Function
    

    上記のすべてのコードを1つのモジュールとして追加すると、次の両方の関数呼び出しが実行されます。

    =UnicodeFromInt(128126)
    
    =UnicodeFromHex("1F47E")
    

    生成されます:????(U + 1F47E)

これら2つのオプションの詳細、および他の言語とプラットフォームのUnicodeエスケープシーケンスについては、私の投稿を参照してください。

さまざまな言語およびプラットフォームにわたるUnicodeエスケープシーケンス(補足文字を含む)

3
Solomon Rutzky

VBAにはコードから文字を取得する関数がありますが、ワークシート関数はわかりません。したがって、この関数をExcelファイルのモジュールに挿入するだけです。

_Function Unicode(val As Long)
   Unicode = ChrW(val)
End Function
_

そして、=Unicode(A1)を使用してワークシートからこれを呼び出すことができます

Result of the user defined function

Excelに文字を表示できるフォントがある場合は、それが表示されます。

(数値が16進数の場合):

_Function Unicode(val As String)
   Unicode = ChrW("&H" & val)
End Function
_
3
stema