セルに入力されている文字が全角か半角かを判断する

見た目だけでは判断しにくい全角と半角


みなさん、こんにちは。あべっきぃです。

弊社で行っている業務の中には、Excelに入力されているセルの値(文字)で、全角と半角を識別する作業が発生することがあります。頻繁ではないのですが、、、

そこで今回は、その際にできるだけ簡単に全半角を判断する方法を見つけた方法ありましたのでご紹介したいと思います。

文字には全角と半角がある
(※実際には作業した事例が少ないため、今回の方法で漏れているパターンがある可能性にもご注意ください)


「文字」には2種類の見え方、数え方がある


「このセルの文字は何文字ある?」

このような質問をされると、普通に「1文字、2文字・・」と数えていけばよいのじゃないの?と思う方も多くいらっしゃると思います。

実はコンピュータの世界ではこのような数え方だとうまくいかないケースもあるんですね。

それが全角と半角文字の違いです。

普段の作業ではほとんど意識することがないと思いますが、Excelのデータを他のExcel以外のシステムなどに読み込ませるときなど、それらの文字が全角や半角などの混在であると取り込めないことやエラーになることがあります。

文字には「同じ文字」でも2つの種類に分けられます。

  • 全角文字
  • 半角文字

いずれも見た目上は大きく変わるわけではないのですが、コンピュータからすると別物扱いされる(異なる文字として扱われる)のですね。

この違いを簡単に言うと、文字の大きさの違いです。

たとえば以下のように、「Aア1」という3文字をそれぞれの種類で比べてみると、その微妙な違いにも気づけると思います。
全角と半角文字の違い

「LEN」と「LENB」関数で文字を判別する


それでは、実際にセルに入力されている文字が全角のみなのか、半角のみなのか、あるいは混在なのか、について見ていきたいと思います。

今回のように文字を対象とした関数を「文字列関数」と言いますが、今回は「2つの文字列関数」を使います。

この手の作業ではVBA(マクロ)を使うのも手ですが、ここでは「LEN関数」と「LENB関数」を使って判別する方法を見ていきます。

「LEN関数」については、セル内の「文字数を取得」できる関数で、知らない方でもすぐにその意味が分かる関数だと思います。

一方、「LENB関数」については、「バイト数を取得」できる関数となりますが、馴染みが無い方も多いかもしれませんね(LEN関数に非常に近いですが・・)。

簡単に説明すると下記のような意味になります。

  • LEN関数:文字数を数える(見たまんま)
  • LENB関数:バイト数を数える(全角文字が2バイト扱い、半角文字が1バイト扱い)

「バイト数」は言い換えると、コンピュータ目線で数える単位です。
分かりづらいところとして、LENB関数は、セルの文字を引数にしたとき、LEN関数と同じ数値を返すこともあれば、違う数値を返すこともあるのですね。

下記に簡単な表を使ってみてみます。
LEN、LENB関数を使ってその数値を見る

LEN関数を使った場合、全角、半角、混在を問わず、見たままの文字数「3(文字)」になりますので分かると思いますが、LENB関数の方は分かりずらいですね。

LENB関数では、半角の場合は「1」と数えます。
たとえば、上から2番目の「半角のみ」では、3つの文字がすべて半角なので、「3」となっています。
一方、一番上の「全角のみ」の場合、半角の文字はなく、すべて全角文字です。全角文字は「2」と数えるため、「6(バイト)」となっています。

全角と半角はパッと見ただけでは判断が難しいので目視は誤りやすいと言えますね。

文字数とバイト数の違いの有無で全角半角を判断する


上記のLEN、LENB関数の仕組みを利用してセルの文字が全角なのか、あるいは半角なのかを知ることができます。

バイト数で全角は半角の2倍になる

セルの文字が全部全角だった場合

セルの文字が全部半角だった場合

(LEN関数 X 2) = LENB関数

LEN関数 = LENB関数


全角:文字数がバイト数の2倍
半角:文字数とバイト数が同じ

全角と半角が混在している場合は、上記のいずれも当てはまりません。
上記関数のこのような仕組み(仕様)を使って全角、半角を判断します。

IF関数を加えて全角か半角かを判別する


それではセルのデータ(文字列)をどのようにして判別するのか見ていきたいと思います。

LEN、LENB関数を使って全角と半角を判別

この画像では最終段階の状態で、「IF関数の中にIF関数をいれる」といういわゆるネスト(入れ子)の状態を作っています。

IF関数で判別したい内容は・・・

  • セルの文字が「全角のみ」か
  • セルの文字が「半角のみ」か
  • セルの文字が「全角半角混在」か

上記の3種類です。

判別する結果が3種類あるため、IF関数1つでは「YES(TRUE)かNO(FALSE)か」の2種類しか判別できないのでネストにしています。

1つ目のIF関数


下記画像はIF関数を1つだけ使った数式を入れているため、「半角、または半角以外」の2つの判定になっています。
IF関数1つで半角のみかをチェック

これですと、「半角以外」の意味が「全角」と「混在」のどちらかがわからずに漏れてしまいます。
これを回避するためにIF関数の中にIF関数を入れます。つまりネストですね。

2つ目のIF関数・・1つ目のIF関数の中に入れる(ネスト)


そこで下記赤線部分「半角以外」の文字のあるところに新たにIF関数を入力します。

IF関数にIF関数を入れる

=IF(LENB(B2)=LEN(B2),”半角のみ”,IF(LENB(B2)=LEN(B2)*2,”全角のみ”,”全角半角混在”))

このようにすると、上記に挙げた3種類(全角、半角、全角半角混在)が判別できるようになります。

全角→半角、半角→全角の変換も関数でできる


なお、全角を半角に、あるいは半角を全角に変換できる関数もあります。

  • JIS関数:半角を全角にする
  • ASC関数:全角を半角にする

この使い方も非常に簡単ですね。
LEN関数などと同様に引数を1つしか取りませんので、全角(または半角)にしたいセルを入れるだけです。
JIS関数とASC関数

ちなみにこれらの関数を使って、「どちら一方に統一するならば」、先に挙げた「セルが全角か半角か」などの判断は不要ですよね。
たとえば、JIS関数を使ってセルの文字すべてを全角にする場合に、セルの文字がすでに全角であったとしても何も影響を受けないからです。

全角、半角の注意点(忘れた頃にやってくる!?)


そもそも普段はあまり意識することのない全角と半角の文字です。
忘れた頃にやってくるとついついミスや勘違いしてしまうこともあるかもしれませんね。

いつくか備忘的に残しておきますですね。

そもそも「半角」が存在しない文字もある


半角かどうか確認するという以前にそもそも半角が存在しない文字もあります。
それは、「ひらがな」や「漢字」ですね。

丸カッコと空白も全角と半角がある


頻繁に使われる丸カッコや空白にも全角と半角があります。
丸カッコなどは日常茶飯事的に混在して使われているといっても過言ではない気がします。
丸カッコ、空白にも全角と半角がある

検索系の関数などにも影響を与えるので、もはやこれは全角、半角というカテゴリ外の話になってしまいますが・・
たとえば、全角の丸カッコのあるセルをCOUNTIFするとき、半角の丸カッコで検索すると見つからないなどが起こります。
これは、冒頭のほうでお話した「コンピュータからすると別物扱いされる(異なる文字として扱われる)」ですね。

全角と半角に「大文字と小文字の違い」は関係ない


私自身が一瞬悩むときもあるのですが(笑)。
アルファベットの大文字と小文字と全半角は別物ですね。
大文字と小文字は全半角に関係ない
つまり、大文字にも全角と半角があり、小文字にも全角と半角がある、ということです。

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