スプレッドシートのUNICODE関数の使い方|Unicode値取得

スポンサーリンク

「このセルに混ざってる謎の文字、いったい何者?」——Googleスプレッドシートで外部データを取り込んだ後、見た目は同じなのに比較がうまくいかない、そんな経験はありませんか。

原因の多くは、全角スペースや特殊文字の混入です。目視では区別できない文字を確実に見抜くには、文字そのものの「正体(コード番号)」を調べる必要があります。

そこで活躍するのが、スプレッドシートのUNICODE関数です。この記事では、UNICODE関数の基本構文から、全角スペース検出・絵文字チェック・文字種判定といった実務トラブルへの応用まで、わかりやすく解説します。

UNICODE関数とは

スプレッドシートのUNICODE関数は、指定した文字列の先頭1文字に対応するUnicodeコードポイント(10進数の整数)を返す関数です。Unicodeとは、世界中の文字に固有の番号を割り当てた国際標準規格のことです。

たとえば「A」という文字には65、全角スペースには12288という番号が割り当てられています。この番号を調べることで、見た目では区別できない文字の正体を突き止められます。

ExcelとGoogleスプレッドシートで構文・仕様は完全に共通しており、どちらの環境でも同じ結果が返ります。データクレンジングや文字化け調査に欠かせない実用的な関数です。

基本構文と引数

UNICODE関数の構文はシンプルです。

=UNICODE(テキスト)
引数必須説明
テキスト必須Unicodeコードポイントを取得したい文字列。先頭1文字のみが評価される。

文字列をダブルクォートで囲んで直接渡すか、セル参照で渡します。

=UNICODE("A")        → 65
=UNICODE(A1)         → A1セルの先頭文字のコードポイント
=UNICODE("あいう")    → 12354(先頭の「あ」のみ評価)

数値を直接渡しても動作します。=UNICODE(123) は文字列「123」として解析され、先頭の「1」のコードポイントである49が返ります。

戻り値の意味(Unicode値=コードポイント)

戻り値は0〜1114111(U+0000〜U+10FFFF)の範囲の整数です。Unicodeで定義されている全範囲をカバーしているため、絵文字のような新しい文字も扱えます。

エラーが返るケースもあります。空文字列("")を渡すと #VALUE! エラーになります。無効なサロゲートペアや、文字列として解釈できないデータ型を渡した場合も同様です。

UNICODE関数の基本的な使い方

実際にスプレッドシートで使ってみましょう。セルに数式を入力するだけで、コードポイントが返ります。

ひらがな・漢字のUnicode値を調べる

日本語の文字を調べると、文字種ごとに番号がきれいに連続していることがわかります。

=UNICODE("あ")    → 12354
=UNICODE("ア")    → 12450
=UNICODE("漢")    → 28450
=UNICODE("①")    → 9312
=UNICODE("😊")    → 128522

ひらがなは12354番(U+3042)から、カタカナは12450番(U+30A2)から始まります。この範囲を覚えておくと、後述の文字種判定で役立ちます。

絵文字(U+10000以上の補助文字)も正しくコードポイントを返します。SNSデータや自由入力フォームのクレンジングにも使えます。

英数字・記号のUnicode値

英数字や半角記号は、ASCIIと呼ばれる古くからある体系で定義されており、コードポイントが小さい範囲(0〜127)に収まっています。

文字UNICODE関数の戻り値
A65
Z90
a97
z122
048
957
半角スペース32
全角スペース12288

注目すべき点は、半角スペースが32なのに対し、全角スペースが12288という大きな値を取ることです。この差を利用すれば、見た目では区別できない両者を確実に見分けられます。

なぜCODE関数でなくUNICODE関数を使うべきか

「CODE関数でも同じことができるのでは?」と思うかもしれません。ASCII範囲(英数字や基本記号)では両者の戻り値は同じです。

しかし日本語や絵文字を扱う場合、選択を誤るとデータの解析結果がブレる可能性があります。スプレッドシートではUNICODE関数を使う方が安全です。

CODE関数との違いを比較表で確認

CODE関数(先頭文字の数値コードを返す関数)とUNICODE関数の違いを整理します。

比較項目UNICODE関数CODE関数
文字コード体系Unicode固定ANSI/Mac文字セット依存
対応範囲U+0000〜U+10FFFF(全範囲)0〜255
環境依存なし(どこでも同じ結果)あり(OSやロケールで変動の可能性)
ASCII範囲(A=65等)同じ同じ
絵文字対応対応非対応
登場時期Excel 2013以降古くから存在

ASCII範囲では両者とも同じ結果(A=65、0=48)になりますが、日本語や絵文字を含む実務データではUNICODE関数の方が予測可能性が高いです。

スプレッドシートでUNICODE関数が安全な理由

CODE関数は歴史的にOSの文字セット(WindowsのシフトJISやMacのMacRomanなど)に依存する仕様でした。そのため日本語の戻り値が環境によって変わる可能性があります。

一方、UNICODE関数はUnicode規格に固定されているため、どの環境で実行しても同じコードポイントが返ります。チームで共有するスプレッドシートや、別環境とのデータ連携を想定するなら、UNICODE関数を選んでおく方が確実です。

なお、Googleスプレッドシートの公式ヘルプではCODE関数も「先頭文字のUnicode数値を返す」と記載されており、スプレッドシート上ではCODE関数がUnicode対応している場合もあります。とはいえ、Excelとの互換性も考慮すると、最初からUNICODE関数で統一しておくのが無難です。

実務トラブル別 活用パターン3選

ここからが本記事の本題です。UNICODE関数を実務トラブルにどう活かすか、よくある3シナリオを数式付きで紹介します。

①全角スペースの混入を検出する(UNICODE=12288)

外部システムからCSVを取り込んだとき、ユーザー名や商品コードに全角スペースが紛れ込んでいて、VLOOKUPが効かない——よくあるトラブルです。

A列の文字列の先頭が全角スペースかどうかを判定する数式はこちらです。

=UNICODE(LEFT(A1,1))=12288

LEFT関数(文字列の左端から指定した文字数を取り出す関数)で先頭1文字を抜き出し、UNICODE関数で12288(全角スペースのU+3000)と一致するかをチェックしています。

文字列のどこかに全角スペースが含まれているかを判定したい場合は、FIND関数とCHAR関数を組み合わせる方法もあります。

=ISNUMBER(FIND(CHAR(12288),A1))

CHAR関数(コードポイントから文字を生成する関数)で全角スペースを生成し、FINDで検索する形です。状況に応じて使い分けてください。

②絵文字・特殊文字の混入チェック(コードポイント範囲判定)

SNSコメントや問い合わせフォームのデータには、絵文字や特殊文字が混入することがあります。基本多言語面(BMP)を超えるU+10000以上の文字を検出するには、しきい値65535で範囲判定するのが手軽です。

=UNICODE(LEFT(A1,1))>65535

TRUEが返れば、先頭文字が絵文字などBMP外の文字だと判断できます。ファイル出力時のエンコードトラブルや、レガシーシステムへの登録エラーを未然に防げます。

複数文字をチェックしたい場合は、ARRAYFORMULAと組み合わせると一気に処理できます。

=ARRAYFORMULA(IF(LEN(A1:A10)=0,"",IF(UNICODE(LEFT(A1:A10,1))>65535,"絵文字あり","")))

③外部データの文字種判定(英字/数字/記号/日本語をIF分岐で仕分け)

「このセルの先頭は英字か、数字か、ひらがなか?」を自動仕分けしたいケースもよくあります。Unicodeのコードポイントは文字種ごとに連続範囲で定義されているため、AND関数で範囲判定するだけで実現できます。

文字種判定式
英大文字=AND(UNICODE(LEFT(A1,1))>=65, UNICODE(LEFT(A1,1))<=90)
英小文字=AND(UNICODE(LEFT(A1,1))>=97, UNICODE(LEFT(A1,1))<=122)
数字=AND(UNICODE(LEFT(A1,1))>=48, UNICODE(LEFT(A1,1))<=57)
ひらがな=AND(UNICODE(LEFT(A1,1))>=12354, UNICODE(LEFT(A1,1))<=12435)
カタカナ=AND(UNICODE(LEFT(A1,1))>=12449, UNICODE(LEFT(A1,1))<=12534)

これらをIFS関数でまとめれば、1セルで文字種ラベルを返す数式になります。

=IFS(
  AND(UNICODE(LEFT(A1,1))>=48,UNICODE(LEFT(A1,1))<=57),"数字",
  AND(UNICODE(LEFT(A1,1))>=65,UNICODE(LEFT(A1,1))<=90),"英大文字",
  AND(UNICODE(LEFT(A1,1))>=97,UNICODE(LEFT(A1,1))<=122),"英小文字",
  AND(UNICODE(LEFT(A1,1))>=12354,UNICODE(LEFT(A1,1))<=12435),"ひらがな",
  AND(UNICODE(LEFT(A1,1))>=12449,UNICODE(LEFT(A1,1))<=12534),"カタカナ",
  TRUE,"その他"
)

外部データの一次仕分けや、入力規則チェックの補助として使えます。

UNICHAR関数との組み合わせ

UNICODE関数の逆方向の処理を担うのがUNICHAR関数です。コードポイントを受け取って、対応する1文字を返します。

文字→コード→文字の変換サイクル

両者の関係を式で表すとこうなります。

=UNICODE("A")     → 65
=UNICHAR(65)      → "A"
=UNICHAR(UNICODE("あ"))   → "あ"

完全な逆変換の関係です。これを利用すれば、コードポイント表の自動生成もできます。

A列にコード番号を入力(65, 66, 67...)
B列に =UNICHAR(A1) を入力

これだけで、A列の番号に対応する文字一覧表が完成します。文字コード調査や教材作成で役立つテクニックです。

なお、Googleスプレッドシートの公式ヘルプでは関連関数として「CHAR」が案内されています。CHAR関数(数値から文字を生成する関数)も同様の用途で使えますが、Unicode全範囲を扱うならUNICHAR関数の方が安全です。

ExcelのUNICODE関数との違い

結論から言うと、構文も挙動もほぼ同じです。

構文は共通・スプレッドシートでも同じように動く

ExcelのUNICODE関数(Excel 2013以降で追加)とスプレッドシートのUNICODE関数は、構文・引数・戻り値の仕様が共通です。Excelで作成したシートをスプレッドシートにインポートしても、UNICODE関数を含む数式はそのまま動作します。

=UNICODE("A")    → 65(Excel・スプレッドシート共通)
=UNICODE("あ")   → 12354(Excel・スプレッドシート共通)

Excel版の詳細な挙動については、当サイトのExcelのUNICODE関数の使い方記事もご覧ください。逆変換のUNICHAR関数や、関連するCODE関数の解説もあります。

スプレッドシート版の関連記事として、スプレッドシートのCODE関数の使い方スプレッドシートのCHAR関数の使い方も合わせて読むと、文字コード関連の操作が一通り押さえられます。

よくある質問(FAQ)

UNICODE関数を使う上でよく出る疑問をまとめました。

Q. UNICODE関数で文字列の2文字目以降のコードを取得したいのですが?

UNICODE関数は先頭1文字しか評価しません。2文字目以降を取得したい場合は、MID関数(文字列の途中から指定文字数を取り出す関数)と組み合わせます。

=UNICODE(MID(A1,2,1))    → 2文字目のコードポイント
=UNICODE(MID(A1,3,1))    → 3文字目のコードポイント

Q. 空白セルや空文字列を渡すとエラーになります。

"" や空セルを渡すと #VALUE! エラーが返ります。IFERROR関数で囲むか、LEN関数で事前にチェックするのがおすすめです。

=IFERROR(UNICODE(LEFT(A1,1)),"")
=IF(LEN(A1)=0,"",UNICODE(LEFT(A1,1)))

Q. 絵文字のコードポイントは環境によって変わりますか?

Googleスプレッドシート公式ヘルプの使用例では、絵文字(U+10000以上)も正しくコードポイントを返すと記載されています。ただし絵文字は比較的新しい文字種のため、バージョンや環境によって挙動差が出る可能性はゼロではありません。本番運用前に、実環境で必ず動作確認を行ってください。

Q. UNICODE関数とCODE関数、結局どちらを使えばよいですか?

迷ったらUNICODE関数を選んでください。環境非依存で、絵文字を含むあらゆる文字に対応します。ExcelとGoogleスプレッドシートを行き来する場合も挙動が安定しています。

まとめ

スプレッドシートのUNICODE関数は、文字のUnicodeコードポイントを10進数で返す、シンプルかつ強力な関数です。

実務ポイントを振り返ります。

  • 構文は =UNICODE(テキスト)。先頭1文字のみ評価される
  • 全角スペース検出は =UNICODE(LEFT(A1,1))=12288 で一発
  • 絵文字混入チェックは >65535 の範囲判定が手軽
  • 文字種判定はAND関数による範囲判定でIF分岐できる
  • ExcelとGoogleスプレッドシートで構文共通、環境非依存で安全
  • 逆変換のUNICHAR関数とセットで覚えると応用範囲が広がる

データクレンジングや文字化け調査の引き出しとして、ぜひUNICODE関数を活用してください。次に「謎の文字」と出会ったときは、もう怖くないはずです。

タイトルとURLをコピーしました