この記事で分かること
- 照合できないコードを LEN(文字数)・EXACT(完全一致の判定)・UNICODE(文字番号)の順で調べ、原因の文字を特定する手順
- 不一致の原因5分類と、見え方・見つけ方・直し方の早見表
- 原因別に整えた照合キー列と、整える前後の一致件数を比べる確認セル
想定読者:投資銀行・PE・FAS などで、自社管理表と外部データの証券コードや勘定科目コードを突き合わせる若手・アナリストの方
前提知識:MATCH・COUNTIF・INDEX の基本(整形の全般は既存記事に委ねます)
結論:見た目でなく文字数と文字番号で比べる
外部データを管理表に突き合わせると、同じに見えるのに一致しない行が残ることがあります。TRIM でも直らない行は、次の順に調べます。
LENで文字数を比べる。差があれば見えない文字が混じっています。EXACTで英大小・全角半角まで区別して比べる。MATCHが「同じ」とする行にも違いが出ます。UNICODEで1文字ずつ文字番号(Unicode のコードポイント。文字に1つずつ振られた番号)を取り出し、最初に番号が違う位置を見つける。
原因が分かれば直す式は1行で足り、直した後は一致件数を前後で比べます。数式の動作は日本語版 Windows の Excel(16.0、ビルド 20430)で確かめた結果です。この環境では XLOOKUP と SEQUENCE が使えないため、照合は MATCH と COUNTIF で確かめています。
設例:30件中8件に見えない差
以下は学習用の架空事例です。自社管理表(左)の証券コード30件を、外部データ(右)の同じ30社のコードと突き合わせます。左を正とし、右の8件に差を仕込みます。コードの割り当ては架空で、同じ番号の実在銘柄があっても本記事とは関係ありません。
コードに英字を使うのは、証券コードの形式が変わったためです。証券コード協議会は、2024年1月1日以降に設定する株式固有名コード(4けた)から、2けた目と4けた目のいずれか、または両方に英大文字を使うと公表しました1。使う文字は、B・E・I・O・Q・V・Z を除く19文字です2。既存のコードは変わらないため3、数字だけのコードと英字入りのコードが混在し、大小や全角半角の揺れが入り込みます(制度の説明は2022年公表の資料に基づきます)。
8件とも画面では左と同じに見えます。No.16 は末尾のノーブレークスペース(改行されない空白。Web からのコピーで混じりやすい)、No.18 は末尾の全角スペース、No.20 は末尾の改行、No.23 は途中のゼロ幅スペース(幅のない空白)、No.24 は全角英数、No.26 は英小文字、No.7 は 0 が英字の O、No.12 は数値として入ったコードです。
Excel は何を「同 じ」とみなすのか
各関数が何を同じとみなすかを整理します(「実測」は上記環境での結果)。
- 英大小:
MATCHは英字の大文字と小文字を区別しません4。COUNTIFも同じです5。実測でも="130A"="130a"は TRUE でした。一方EXACTは大小を区別し、完全に一致すれば TRUE を返します6。 - 全角と半角:別の文字です。実測で
="130A"="130A"は FALSE、MATCHは#N/Aでした。 - 数値と文字列:実測では、文字列の 2820 を数値の 2820 の範囲から探すと
MATCHは#N/Aでした。一方COUNTIFは1件と数え、EXACT(2820,"2820")も TRUE でした。 - ワイルドカード:
COUNTIFの条件やMATCH(照合の型0)では?と*が特別な文字で、文字そのものを探すには前に~を付けます7。実測ではA*BがAxxBにも一致しました。
したがって英小文字の行(No.26)は MATCH で見つかりますが、EXACT は FALSE です。逆に型違いの行(No.12)は、COUNTIF を信じると見逃します。
手順1:LEN の差で隠れた文字を探す
左を B 列、右を C 列に置き、行ごとに文字数を比べます。
文字数の差=LEN(C2)-LEN(B2)(0 以外なら、どちらかに余分な文字がある)
設例では No.16・18・20・23 の4行が +1 で、見えない文字が1つ増えています。残りの4行(No.7・12・24・26)は左右とも4文字で、全角半角、英大小、似た別の文字、型違いのいずれかです。LEN は数値も文字として数えるので、型違い(No.12)も 4 です。
見えない文字には TRIM で消えないものがあります。TRIM は文字番号32の空白が対象で、160のノーブレークスペースは除かれません8。CLEAN が除くのは文字番号0〜31の印刷できない文字で、ゼロ幅スペースは対象外です9。全角スペースは実測では先頭と末尾だけ TRIM で消えましたが、説明にない挙動なので SUBSTITUTE で明示的に除きます。
手順2:最初に違う文字を UNICODE で特定
次に EXACT が FALSE の行で、最初に違う位置とその文字番号を取り出します。SEQUENCE の代わりに配列定数 {1,2,3,4,5,6} を使います。
差の位置(G列)=IFERROR(MATCH(FALSE,INDEX(EXACT(MID(B2&REPT(" ",6),{1,2,3,4,5,6},1),MID(C2&REPT(" ",6),{1,2,3,4,5,6},1)),0),0),"なし")
文字番号(H列、左→右)=IFERROR(UNICODE(MID(B2,G2,1)),"なし")&"→"&IFERROR(UNICODE(MID(C2,G2,1)),"なし")
MID で1文字ずつ取り出して EXACT で位置ごとに比べ、最初の FALSE の位置を MATCH で探します。REPT(" ",6) は短い側が尽きた位置も差として拾うため、EXACT は英小文字の違いを見逃さないために使います。設例の結果が図表1です。
| No. | 左コード | LEN 左/右 | EXACT | 差の位置 | 文字番号 左→右 | 特定した原因 |
|---|---|---|---|---|---|---|
| 7 | 5071 | 4/4 | FALSE | 2 | 48→79 | 数字 0 と英字 O |
| 12 | 7770 | 4/4 | TRUE | なし | なし→なし | 数値(型違い) |
| 16 | 201C | 4/5 | FALSE | 5 | なし→160 | ノーブレークスペース |
| 18 | 317D | 4/5 | FALSE | 5 | なし→12288 | 全角スペース |
| 20 | 408F | 4/5 | FALSE | 5 | なし→10 | 改行(LF) |
| 23 | 559G | 4/5 | FALSE | 3 | 57→8203 | ゼロ幅スペース |
| 24 | 603H | 4/4 | FALSE | 1 | 54→65302 | 全角英数 |
| 26 | 722J | 4/4 | FALSE | 4 | 74→106 | 英小文字(j) |
UNICODE の実測値。(スマートフォンでは表を横にスクロールできます)図表1のとおり、LEN が 4/5 の4行は、右の文字番号から 160(ノーブレークスペース)、12288(全角スペース)、10(改行)、8203(ゼロ幅スペース)と分かります。4/4 の行は、No.24 が 65302(全角の数字)、No.26 が 74 と 106(J の大文字と小文字)、No.7 が 48(数字の 0)と 79(英字の O)です。No.12 だけは EXACT が TRUE です。
No.23 を1文字ずつ分解したのが図表2です。
先頭の2文字は左右とも 53 ですが、3文字目が左は 57、右は 8203 で、以降は1つずつずれます。最初に違う位置を見れば、原因の文字が1つに絞れます。
CODE は文字セットに基づく番号を返すので代用できません10。UNICODE は先頭文字の Unicode のコードポイントを返します11。実測では全角の「A」が UNICODE で 65313、CODE で 9025、ゼロ幅スペースは CODE だと「?」と同じ 63 になり区別できませんでした。
型違いは ISTEXT で見つける
コードが数値で入っている No.12 は、文字数も EXACT も差を示さず、MATCH だけが #N/A を返します(検索値が見つからないことを示すエラー値)。この場合は =ISTEXT(C13) で右が文字列かを調べ、FALSE なら数値です。コード列は左右とも文字列にそろえます(数値と文字列の一般論はExcelの財務データクリーニング実務)。
原因の5分類と直し方
8件の原因を5つに分類し、見え方・見つけ方・直し方を並べたのが図表3です。
| 分類 | 見え方 | 見つけ方 | 直し方 |
|---|---|---|---|
| A 隠れた文字(160・12288・10・8203) | 同じに見える | LEN の差、UNICODE | SUBSTITUTE、CLEAN |
| B 全角・半角 | 字幅が違う | EXACT、UNICODE が 65000 台 | ASC |
| C 英大小 | 大小の違い(MATCH では外れない) | EXACT だけが FALSE | UPPER、LOWER |
| D 似た別の文字 | O と 0、ハイフン類 | UNICODE の番号 | 規則を決めて置換 |
| E 数値と文字列 | 同じに見える | ISTEXT、MATCH と COUNTIF の差 | 文字列へそろえる |
分類Dの「ハイフン類」は社名や科目名のキーで起きます。実測では半角の「-」が 45、「‐」が 8208、「−」が 8722、全角の「-」が 65293、長音「ー」が 12540 で、見た目が近くても番号は違います。置換の規則はキーの種類ごとに決めるもので、設例には現れないため番号を示すにとどめます。
整えた前後の一致件数を比べる
元のデータは変えず、照合キー列を別に作り、原因別に1段ずつ整えます。右コードは C 列、整える列は N〜Q 列(手順1〜4。それぞれ前の列を参照)です。
- 手順1(隠れた文字を除く):
=TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C2,UNICHAR(160),""),UNICHAR(8203),""),UNICHAR(12288),"")))。UNICHARは文字番号から文字を返します。SUBSTITUTEを通すと数値も文字列になり、型違いも直ります。 - 手順2(全角を半角に):
=ASC(N2) - 手順3(英字を大文字に):
=UPPER(O2) - 手順4(O を 0 に):
=SUBSTITUTE(P2,"O","0")
手順4は性質が違います。証券コードに使う英大文字は、O を含む7文字を除いた19文字です12。そのため4けたのコード列に限り、O は 0 の入力ミスとみなして置換できます。これは編集部の判断で、社名や他の列には使えません。
確認セルは次の3つで、補助として K 列に =IFERROR(MATCH(B2,$Q$2:$Q$31,0),0)、M 列に =IF(K2>0,EXACT(B2,INDEX($Q$2:$Q$31,K2)),"") を置きます。
- MATCH で一致した件数:
=SUMPRODUCT(--ISNUMBER(MATCH($B$2:$B$31,$Q$2:$Q$31,0))) - COUNTIF で一致した件数:
=SUMPRODUCT(--(COUNTIF($Q$2:$Q$31,$B$2:$B$31)>0)) - 英大小まで一致した件数:
=COUNTIF($M$2:$M$31,TRUE)
Q 列を C・N・O・P 列に差し替えて数えた各段階の件数が図表4です。
| 段階 | MATCH | COUNTIF | EXACT まで一致 | MATCH で外れた行 |
|---|---|---|---|---|
| そのまま | 23 | 24 | 22 | 7 |
| 手順1 隠れた文字 | 28 | 28 | 27 | 2 |
| 手順2 全角→半角 | 29 | 29 | 28 | 1 |
| 手順3 大文字化 | 29 | 29 | 29 | 1 |
| 手順4 O→0 | 30 | 30 | 30 | 0 |
図表4のとおり、そのままでは MATCH で23件、COUNTIF で24件で、差の1件は型違いの No.12 です。手順1で5件(隠れた文字4件と型違い1件)が直って28件、手順2で全角英数が直って29件です。手順3で英大小まで一致した件数が29件になり、手順4で No.7 が直って30件がそろいます。
3つの件数の食い違いも異常の合図です。複数の確認を1つに集める考え方は、用語集のモデルチェックサムの設計が説明しています。
使い分けと限界
分解式は数万行に入れると重いので、外れた行だけに使い、全件には正規化列を使います。診断列の式は全行で同じ形にします(一行一式の原則)。
正規化列は既知の原因にしか効きません。IFERROR で #N/A を隠さず、外れた行を残して同じ手順で調べます。使いどころはIFERROR関数の使い方と用語集のIFERROR関数に委ねます。入力段階で防ぐ方法はExcelのデータ検証
原因が重なる行は、手順1から1段ずつ直し、どの段で消えるかを見ます。結果は確かめた環境と設例の範囲のもので、別のバージョンや他のツールで同じとは限りません。
実務チェックリスト
- 外れた行は、まず
LENの左右差を確認する。 - 差がない行は
EXACTで比べ、MATCHの判定と食い違う行を拾う。 - FALSE の行は、最初に違う位置の文字番号を左右とも取り出し、図表3に当てはめる。
- 文字に差がなく
MATCHだけが#N/Aなら、ISTEXTで左右の型をそろえる。 - 整えた列は元の列を残して別に作り、3つの一致件数を前後で比べる。
- 置換の規則はキーごとの根拠(例:コードに使わない文字)で決め、他の列に流用しない。
- キーに
*・?・~があれば件数のずれを疑う。
よくある質問(F AQ)
英大小の違いは、照合に失敗しないなら直さなくてよいですか。
Excel 内の MATCH や COUNTIF で完結するなら一致します。ただし EXACT で検算する場合や、大小を区別する別のツールへキーを渡す場合は差になります。
社名の照合でも同じ手順が使えますか。
使えます。ただし
まとめ
見た目が同じなのに外れるキーは、LEN・EXACT・UNICODE の順に調べると原因の文字が絞れます。設例では4段で整えて23件が30件になりました。MATCH と COUNTIF で一致の意味が違い、英大小は MATCH では外れない点を押さえると、診断を読み違えません。
脚注
- 証券コード協議会のリーフレット「2024年1月から証券コードに英文字が入ります!」p.2「英文字組入れの概要」1・3。2024年1月1日以降に設定する株式固有名コードから、2けた目と4けた目のいずれか、もしくは両方に英文字を使用(参考文献 R1)。↩
- 同リーフレット p.2「2. 使用する英文字」。「英大文字のうち、『B』、『E』、『I』、『O』、『Q』、『V』、『Z』を除く19文字を使用します。」(参考文献 R1)↩
- 同リーフレット p.1 は、既に設定されているコードは変更されない(数字のみのまま)と記しています。東京証券取引所の2022年5月31日付文書は、証券コード協議会が2024年1月1日以降に新たに設定するコードから英文字を組み入れると公表したことを伝えています(参考文献 R1・R2)。↩
- Microsoft サポート「MATCH 関数」:MATCH 関数では英字の大文字と小文字は区別されない(参考文献 R5)。↩
- Microsoft サポート「COUNTIF 関数」:条件で大文字と小文字は区別されない(参考文献 R6)。↩
- Microsoft サポート「EXACT 関数」:2つの文字列がまったく同じなら TRUE、そうでなければ FALSE を返し、大文字と小文字は区別する。Wall Street Oasis の同関数のページも大小を区別する比較と説明(一般的な概念の参考。参考文献 R3・R4)。↩
- Microsoft サポート「COUNTIF 関数」「MATCH 関数」:? は任意の1文字、* は任意の文字列を表し、文字そのものを探すには ~ を前に付ける(参考文献 R5・R6)。↩
- Microsoft サポート「TRIM 関数」:TRIM は 7 ビット ASCII のスペース(10進値32)を対象とし、10進値160の改行しないスペースは削除しない(参考文献 R7)。↩
- Microsoft サポート「CLEAN 関数」:7 ビット ASCII の印刷できない先頭32文字(値0〜31)を削除するよう設計されている(参考文献 R8)。↩
- Microsoft サポート「CODE 関数」:先頭文字の数値コードを返し、コードはコンピューターの文字セット(Windows は ANSI)に対応する(参考文献 R9)。↩
- Microsoft サポート「UNICODE 関数」:文字列の最初の文字に対応する番号(コードポイント)を返す(参考文献 R10)。↩
- 脚注2と同じ記述(リーフレット p.2)に基づき、O を 0 の誤入力とみなす置換は編集部が導いた判断です(参考文献 R1)。↩
参考文献(2 026年10月確認)
- R1 証券コード協議会「2024年1月から証券コードに英文字が入ります!」(リーフレット、© 2022) jpx.co.jp (p.1、p.2「英文字組入れの概要」。脚注1・2・3・12。閲覧日:2026年10月24日)
- R2 株式会社東京証券取引所「証券コードへの英文字組入れの円滑な実施に向けた対応について」(2022年5月31日) jpx.co.jp (本文第1段落。脚注3。閲覧日:2026年10月24日)
- R3 Microsoft サポート
「E XACT 関数」 support.microsoft.com (説明。脚注6。閲覧日:2026年10月24日) - R4 Wall Street Oasis「EXACT Function」 wallstreetoasis.com (一般的な概念の参考。脚注6。閲覧日:2026年10月24日)
- R5 Microsoft サポート
「M ATCH 関数」 support.microsoft.com (解説。脚注4・7。閲覧日:2026年10月24日) - R6 Microsoft サポート
「C OUNTIF 関数」 support.microsoft.com (ワイルドカード等の記述。脚注5・7。閲覧日:2026年10月24日) - R7 Microsoft サポート
「T RIM 関数」 support.microsoft.com (備考。脚注8。閲覧日:2026年10月24日) - R8 Microsoft サポート
「C LEAN 関数」 support.microsoft.com (備考。脚注9。閲覧日:2026年10月24日) - R9 Microsoft サポート
「C ODE 関数」 support.microsoft.com (説明と環境の表。脚注10。閲覧日:2026年10月24日) - R10 Microsoft サポート
「U NICODE 関数」 support.microsoft.com (説明。脚注11。閲覧日:2026年10月24日)
※本記事は教育目的の一般的な解説であり、法務・税務・投資助言ではありません。設例は理解のための学習用の架空事例であり、実在の企業・案件とは関係ありません。