小学校の算数の授業で「整数の123と文字の123は違いますよ~」と説明してもなかなか理解してくれないと思いますが、Excelを使う大人の皆さんは必ず理解しなければならない概念です。Excelに限らず、コンピュータの世界では、数値としての123と文字列として入力した123はまったく異なるものとして扱います。
Excelで「0123」と入力すると数値の123と解釈され、自動的に123と表示されますが、「文字列」として0123と入力すると123にはなりません(文字数が違うからです)・・・この日本語が完全に理解できている人が、日本人の何%くらいいるのでしょうか?
Excelでは数値と文字列は相互に変換できます。そこで、数値と文字列は何が違うのか、どのように変換すればよいのか、先頭に0を付けるにはどうすればよいかについて徹底的に解説したいと思います。
目次
問題文のあとに簡単な操作方法を解説していますが、静止画では、わかりにくいと思いますので、最後に動画を載せています。ぜひご覧ください。
- 1.数値と文字列の違い
- 2.どうしても納得いかない人のために・・・
- 3.数値と文字列の入力方法
- 4.Excelを使うときの注意点
- 5.文字列と数値を混在させることが間違い
- 6.数値と文字列を見分ける方法
- 7.文字列を数値に一括変換する方法
- 8.数値を文字列に一括変換する方法
- 9.補足
1.数値と文字列の違い
数値(numeric value)は量や計算結果を表す値です。文字列(string)は文字を並べたものであり、文字列連結以外の計算はできません。
例えば、4月1日のことを4桁で「0401」と書くことがありますが、これは「04」と「01」を連結した文字列であって、「401」という3桁の数値を表しているわけではありません。401という数値は数直線上にあって400と402の間の整数ですが、0401は0331と0402の間にある日付を表す文字列です。
つまり「数直線上の数値」と「数字を1つずつ並べただけの文字列」は異なるということです。
2.どうしても納得いかない人のために・・・
「数値と文字列は異なる」と言われてもピンとこない人のために、いくつかの例を紹介します。
(1)数値としては同じなのに文字としては違う意味になる
「第1章第1節」のことを「1.1」と表すことがあります。この場合、「1.9」の次は「1.10」、「1.11」、「1.12」・・・と続きます。小数としては「1.1」と「1.10」は同じ値ですが、第1章第1節と第1章第10節では全く違います。ドットを小数点(数値)と解釈するか、区切り文字(文字列)と解釈するかの違いです。
(2)計算してもよい場合と計算できない場合がある
引き算の式としての「163-8001」を計算すると「-7838」となります。「163-8001」と「162-8000」は同じ計算結果になります。Excelで次のIF文を入力してみてください。「163-8001」と「162-8000」を数値として比較するとイコールになります。
- =IF(163-8001=162-8000,"等しい","等しくない")
しかし、郵便番号と解釈するのであれば引き算をしてはいけません。数字が並んでいるだけの文字列と考えれば「163-8001」と「162-8000」は等しくありません。異なる地域を表す郵便番号ですから当たり前のことです。
=IF("163-8001"="162-8000","等しい","等しくない")
このように、数値(数式)と解釈するか文字列と解釈するかによって、比較した結果がイコールになったり、ならなかったりするのです。
(3)読み方と大小関係
値札に¥4,321と書いてあれば、これは数値です。「1円」が4321個集まったものであり、高い・安いといった大小関係があります(割引も可能です)。数値の4321は「ヨンセンサンビャクニジュウイチ」と読みます。4000+300+20+1を計算した10進数であることを表すためです。数値の場合4文字と言わず、4桁(けた)といいます。
これに対して、車のナンバープレートに4321と書いてある場合は、数値ではなく文字列です。何かが4321個集まったものではありません。車を識別するコード番号であって大小関係はありません(割引の概念もありません)。文字列の4321は「ヨンサンニイチ」と読みます。4と3と2と1を連結した4文字の文字列であることを表すためです。
「製品番号ABC4321-Z」のように他の文字や記号とともに使われる数字は文字列です。Excelの関数で4321の部分だけ取り出したとしても、その演算結果である4321は文字列です(後述)。
(4)文字コード
文字としての「1」を数値に換算すると49になります。"2"=50、"3"=51です。これを文字コードといい、ExcelではCODE関数を使って変換します。文字コードについてはCSVの記事で詳しく解説しています。
3.数値と文字列の入力方法
(1)表示形式
Excelで数字を入力するとき、標準の表示形式の場合は「数値」、文字列の表示形式の場合は「文字列」となります。数値を入力すると自動的に右揃えになり、文字列として入力すると左揃えになります。
データの種類のことをデータ型ということがあります。それぞれ「数値型」「文字列型」といいます。これは入力する前のセルの表示形式によって決まります。入力する前に表示形式を設定しておく必要があります。
入力した後で表示形式を変えても、数値型が文字列型になったり、文字列型が数値型になったりすることはありません。また、データ型は「値の貼り付け」などをしても変わることはありません(変換方法は後述)。
(2)シングルクォーテーション
先頭にシングルクォーテーションをつけると、入力したデータはすべて文字列型になります。全角数字は全角数字のまま、計算式は計算式のままになります。このとき、セルにはシングルクォーテーションは表示されませんが、数式バーにはシングルクォーテーションがあります。
4.Excelを使うときの注意点
Excelでは数値と文字列を区別するため、特に、文字列を入力するときには注意しなければなりません。
(1)並び順が異なる
文字列の場合、文字数に関係なく先頭の文字から順に比較しますから、10~110を並べると「10、100、110、20、30、40、・・・、80、90」となります。並べ替えの際に注意が必要です。ちなみに、先頭に0をつけたら「010、020、030、・・・、080、090、100、110」となります。
数値の場合は「10、20、30、・・・、80、90、100、110」となります。
(2)Excelの数値は15桁まで、文字列は32767文字まで
Excelの小数の計算方法は標準規格IEEE754に準拠しているため、数値の有効桁数は15桁までで、16桁以上の数字は自動的に0に変換されます。簡単に言えば、Excelは15桁までしか計算できません。クレジットカードのカード番号は16桁ですが、16個以上の数字を並べたいときは文字列にしなければなりません。
(3)フィルタ
オートフィルタでは1件目のレコードが文字列の場合はテキストフィルタとなり、1件目のレコードが数値の場合は数値フィルタとなります。文字列と数値が混在している場合はフィルタで抽出できない場合があります。
(4)自動変換
数値として入力したつもりがないのに、Excelが勝手に数値に変換してしまう場合があります。特に、ハイフン(-)、スラッシュ(/)、パーセント(%)を含む場合は要注意です。「1-1-1」「1/2」「20%」を文字列として入力したい場合は、あらかじめ表示形式を「文字列」にしてから入力します。
(5)関数を使用するときもデータ型に注意
文字列型はオートカルク、SUM関数などで計算除外になります。また、VLOOKUP、MATCHなどの検索関数において、検索値とデータ型が一致しない場合はヒットしません。数値の10を検索しても元の表のコードが文字列の10であれば不一致です。
5.文字列と数値を混在させることが間違い
(1)フィールド定義をしよう
リスト形式の表の場合、それぞれの列には項目名があり、列にはデータを格納する目的があり、列ごとに文字列を入力するのか、数値データを入力するのかを決めなければなりません(フィールド定義)。1つの列の中に数値と文字列が混在するのは間違いです。
(2)コードで数値を使ってはならない
商品コード、得意先コード、請求書連番など、データを管理するのにIDとして記号・番号を付けなければならない場合があります。このとき「数値」をコードとして付けるのはあまり良くありません。
どうしても数値を使いたいときは桁数を揃えなければなりません。例えば、4桁のコードの場合1000~9999とするべきであり、999以下の数値を使ってはいけません。もし999以下の数値を使う場合は先頭に文字を入れて「A0999」のようにします。誕生日のようにどうしても先頭が0になってしまう場合は文字列型で統一すべきです。
6.数値と文字列を見分ける方法
問題
次の図のA1:A10が数値型か文字列型か判別せよ。
解説
前述のとおり、入力した後で表示形式を変えても、入力し直さない限り、数値型・文字列型を変えることはできません。ということは、表示形式が文字列であっても数値が入力されているかもしれないし、逆に、表示形式が標準(数値)であっても文字列が入力されているかもしれないということです。
右揃えになっているからと言ってすべてが数値型とは限りません。Excelの画面では全く見分けがつきません。
(1)TYPE関数
入力されている値のデータ型を見分ける関数は「TYPE」です。使い方は簡単です。引数としてそのセルを参照するだけです。数値であれば1、文字列であれば2となります。
(2)ジャンプ
関数を使わずに調べる方法として「条件を選択してジャンプ」があります。
はじめに範囲選択をしておきます。
条件を選択してジャンプで、定数-数値を選択します。
数値だけが選択できます。書式も変えられます。
定数-文字とすると、文字列型の数を選択できます。
(3)比較演算
比較演算をした時にデータ型も区別しますので、データ型が同じであればTRUE、異なるデータ型であればFALSEとなります。隣に数値を入力したとします。イコールによって比較演算をした場合、TRUEであれば数値、FALSEであれば文字列型であることが分かります。
7.文字列を数値に一括変換する方法
問題
文字列型で入力されているデータを、数値型に一括で変換する方法をできるだけ多く考えなさい。
解説
文字列型で入力した場合のほか、文字列操作関数(RIGHT、LEFT、MIDなど)によって数値の部分だけを取り出した場合も文字列型になります(後述)。
また、文字列連結演算子(&)を用いた場合も文字列扱いになります。これらを数値型に変換する方法はいろいろあります。
(1)エラーチェック
文字列型で数値に変換できるセルはエラーチェック機能により、三角のマークが表示されます。複数のセルを選択して数値に変換することができます。ただし、この方法は少量のデータの時には有効ですが、大量のデータの場合は変換するのに時間がかかる(フリーズするおそれがある)のでやめたほうが良いです。
(2)0をたす、1をかける
Excelの場合、足し算や掛け算は文字列型であっても数値として計算するルールになっています。本来は「="11"+"22"」のような文字列型の足し算はできませんが、Excelの場合は「=11+22」とみなして計算します。そして、計算した結果は数値型になります。
この性質を利用して、「0をたす」または「1をかける」ことによって数値型に変換することができます。
(3)演算貼り付け
上記の性質を利用して、コピー・演算貼り付けをするという方法も考えられます(参考:【Excel】コピーをして値の貼り付けや演算貼り付けによって計算式を消す)。例えば、別のセルに「0」と入力して、コピーをします。
形式を選択して貼り付けをします。
このとき「加算」を選びます。これで数値型になります。
「1」と入力して、「乗算」で貼り付けても同じです。ただし、演算貼り付けはそのセルに対して直接上書きするので、そのセルにすでに数式が入っていた場合にうまくいかないことがありますので注意が必要です。
(4)区切り位置指定ウィザード
区切り位置指定ウィザードは、もともとはハイフンのある数字(郵便番号など)を分割するときに使いますが、データ型の変換としても使われます。範囲選択して、区切り位置指定ウィザードを表示します。
「G/標準」が選択されていることを確認してそのまま完了します。これで数値型になります。この場合、一括でシングルクォーテーションをなくして数値にすることもできます。ただし、区切り位置指定ウィザードによる変換は1列ずつしかできません。
(5)VALUE関数
文字列を数値に変換する関数はVALUEです。文字列型で入力されたセルを参照すると数値型に変換されます。
ただし、数値に変換するときは1を掛けるだけでよいので、VALUE関数をわざわざ使う必要はありません。マイクロソフト公式サイトにも書いてあります。
Excelでは、数式中の値は必要に応じて自動的に変換されるため、通常は数式の中でVALUE関数を使用する必要はありません。この関数は、他の表計算プログラムとの互換性を維持するために用意されています。
8.数値を文字列に一括変換する方法
問題
数値型で入力されている数値を、文字列型に一括で変換する方法をできるだけ多く考えなさい。
解説
(1)空白文字列を連結する
Excelの場合、文字列連結演算子(&)を用いた場合は数値であっても文字列型になるルールになっています。この性質を利用して、空白文字列を連結することによって文字列型に変換することができます。空白文字列はダブルクォーテーション2つ("")です。
(2)区切り位置指定ウィザード
範囲選択して、区切り位置指定ウィザードを表示します。「文字列」を選択して完了します。これで文字列型になります。ただし、区切り位置指定ウィザードによる変換は1列ずつしかできません。
(3)文字列操作関数
Excelの文字列操作関数を使うと計算結果はすべて文字列型になります。
数値Xを文字列型に変換する方法は主に次のような方法があります。TEXT関数は「=TEXT(X,"@")」でもよいですが、TEXT関数で空白セルを参照すると0になりますから、空白文字列を連結したほうがよいです。
- =ASC(X)
- =RIGHT(X,LEN(X))
- =LEFT(X,LEN(X))
- =MID(X,1,LEN(X))
- =SUBSTITUTE(X,,) ※第2、第3引数は何も入力しない
- =TEXT(X&"","@")
TEXT関数で数値を表す表示形式("#,##0"など)を指定しても戻り値は必ず文字列型になります。なお、文字列操作関数に0を加算したり、1をかけたりすると数値型になります。
なお、TEXT関数について、詳しくはこちらの記事をご覧ください。
9.補足
(1)先頭に0を付ける
先頭に0を付けるには前述のように文字列型として入力すればよいですが、一括で0をつけるにはまず桁数を決めます。仮に、数値Xを5桁にする場合は、Xの左に「00000」を連結して右から5文字取得するか、またはTEXTでXの表示形式を「00000」にします。
- =RIGHT("00000"&X, 5)
- =TEXT(X&"","00000")
(2)CSVなどを読み込む場合
CSVやTSVなどのテキストファイルは「テキストファイルウィザード」で読み込む際に、数値型か文字列型かを選択することができます。読み込んだ後に変換するのではなく、読み込む前に確認すべきです。読み込んでしまった場合は区切り位置指定ウィザードで変換すればよいです。
(3)セルに入力した数式を計算して数値型にする
「1+1」は文字列です。
これにイコールを連結します。&を使っているので文字列型です。
コピーして値の貼り付けをします。
「=1+1」を区切り位置指定ウィザードで標準にすると2になります。
解説は以上です。