「このセルに混ざってる謎の文字、いったい何者?」——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関数の戻り値 |
|---|---|
| A | 65 |
| Z | 90 |
| a | 97 |
| z | 122 |
| 0 | 48 |
| 9 | 57 |
| 半角スペース | 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関数を活用してください。次に「謎の文字」と出会ったときは、もう怖くないはずです。
