TEXT関数 ~ 数値を日指定した文字列に変更する ~

Excelは非常に汎用的なソフトウェアであるため、業務用のシステムや他のソフトウェアなどからデータを取り込んで(読み取って)利用することができます。

データをExcelで加工し、グラフ化などに役立てるわけですが、中でも多いのがCSV形式のデータです。(CSVについては、主な拡張子 を参照してください)

このように外部のデータを利用した時によくあるのが、数値や日付が文字列として認識されているために、Excelでうまく加工できないケースです。

特に日付表示や時間表示については、24時間表示とシリアル値 で学習のとおり、Excel内部でシリアル値として認識されていなければそれを利用して計算することができません。

取り込んだデータを日付表示に変換する方法はいくつかあり、区切り位置の指定 で学習した区切り位置指定から簡単に変換することができますが、本項で学習するのは、

TEXT関数(テキスト)

を使った表示変換になります。

TEXT関数は、文字どおりテキスト、つまり「文字列」に変換する関数です。したがって、

TEXT関数で変換した値は計算に利用することができない

ということになります。

ではなぜ、わざわざ学習するのかというと、日付表示に変換するのにTEXT関数を利用する方法がインターネット等で広く紹介されているからです。

データの利用目的に合わせて使い分けることが必要になるので、このことをまず理解したうえで、下図のような3パターンの日付表示についてみていきましょう。

Excelの日付表示のイメージ

それぞれよくある日付の表示形式になります。

まず、これらの日付表示は、CSV等で抜き取ったデータを活用した場合によくある現象で、Excel上では文字列として認識されています。

どのように判断するのかというと、すべて左詰めで表示されているからです。特に「1」は一見すると数値認識に見えますが、セルの左上に緑色の三角マークが付いています。

セルのエラーインジケーターのイメージ

なぜかというと、データの先頭にシングルクォーテーション「'」が付いているためです。

セル先頭のシングルクォーテーションのイメージ

ゼロ値の表示と非表示 で学習のとおり、これによって文字列として扱われます。CSVで抽出したデータにはこうした記号が付いたり、空白(スペース)がデータのうしろに挿入されていたりすることがあります。

他の「2」と「3」も文字列として認識されています。まずは、シリアル値として認識する日付形式に変換してみましょう。

いくつか方法がありますが、もっとも簡単なのは、区切り位置の指定 で学習した区切り位置指定から変換する方法です。

復習になりますが、セルをまとめて選択して、「データ」タブの「区切り位置」ボタンから区切り位置指定ウィザードを起動します。

「区切り位置指定ウィザード」のイメージ

この場合はどちらを選択してもかまいません。3ページまで「次へ」で一気に進みます。

「区切り位置指定ウィザード」のイメージ

ここで「日付」を選択し、変換後の表示先セルを指定して「完了」をクリックすると、選択した文字列がまとめて変換されます。

シリアル値の日付表示に変換されたイメージ

変換後の日付表示のほうは右詰めで表示されています。シリアル値で認識されているかどうか確かめるには表示形式を「標準」に切り替えます。シリアル値が表示されたら文字列認識ではないということになります。

「標準」形式でシリアル値が表示されたイメージ

同様に、生年月日「2」の形式でも変換することができます。

シリアル値の日付表示に変換されたイメージ

同様に、生年月日「3」の形式でも変換することができます。

シリアル値の日付表示に変換されたイメージ

つまり、こうした代表的な日付の書式については、わざわざ関数を使用しなくても「区切り位置指定ウィザード」ですべて簡単に変換することができるのです。

では、TEXT関数を使ってみましょう。

TEXT関数の使い方は簡単で、変換元のセルを指定して、引数となる表示形式を指定するだけです。

「関数の引数」画面のイメージ

この場合は、文字列「19800902」の「A3」セルを指定して、表示形式に「yyyy/mm/dd」を指定しています。(表示形式については後述します)

これで「OK」ボタンをクリックするとどうなるでしょうか。じつはエラーとなってしまいます。

もうおわかりのことと思いますが、

TEXT関数は数値やシリアル値を文字列に変換する関数

であるため、文字列を文字列に変換する関数ではありません。

したがって、文字列認識されている日付をシリアル値の日付に変換する関数としては使えないということです。この前提を理解せずに関数で日付変換しようと思い込んでいる方があります。このことはしっかり理解しておいてください。

では、シリアル値に変換した日付を、さらにTEXT形式で文字列に変換してみましょう。

TEXT関数で日付を変換したイメージ

今度は変換元となるセルをシリアル値の「B3」セルを指定しています。すると、左寄せの文字列として日付表示が変換されました。

また、TEXT関数は「yyyy/mm/dd」の部分を変更することで、さまざまな表示形式にすることができます。和暦表示や当該日付の曜日などを文字列として表示させることができます。

TEXT関数で日付を変換したイメージ

「C4」セルの数式は「=TEXT(B4,"ggge年m月d日")」、「C5」セルの数式は「=TEXT(B5,"aaa曜日")」です。

このように、引数に表示形式を指定することで日付だけでなく、曜日も表示することができます。日付と組み合わせて「"ggge年m月d日aaaa")」などとすることで、日付と曜日も同一セルで表示させることも可能です。

TEXT関数で日付を変換したイメージ

表示記号は 書式のユーザー定義 で学習したユーザ定義の記号と同じです。以下はTEXT関数で使われる代表的な記号ですが、この他にも多くの記号を使うことができます。

表示記号一覧表
記号 解説
yyyy/yy 西暦表示の年の記号。yの数は桁数。
(2020年:yyyy=2020、yy=20)
mm/m 月の記号。mの数は桁数。
(9月:mm=09、m=9)
dd/d 日「の記号。dの数は桁数。
(9日:dd=09、d=9)
ggge/gge/ge 西暦表示の年の記号。gの数は元号表記。
(2020年:ggge=令和2、gge=令2、ge=R2)
 aaaa/aaa  曜日の記号。aの数は曜日の表示数。
(aaaa=金曜日、aaa=金)

ただし、書式のユーザー定義 で学習のとおり、シリアル値の日付であっても、同じようにユーザー定義で書式変更することが可能です。

わざわざTEXT関数を使って文字列にする意味はあるのでしょうか?

と思われることでしょう。はっきりいってデータとして扱えないために、個人的にはあまり用途がありません。

例えば、下図のように日付を組み合わせた「文章」を表示する場合に利用します。

TEXT関数を組み合わせた文章のイメージ

この文章は日付と時間の部分にTEXT関数を使っています。時間の記号は、年月日と同様に「h」と「m」になります。少々応用的ですが、文字列との組み合わせは「&」で結合することができます。

TEXT関数を組み合わせた式のイメージ

このような場合は、通常どおりセル参照すると、文字列として認識せずにシリアル値が表示されてしまいます。

文字列の中にシリアル値が表示されている

表示形式を変更する場合は、どのような目的で変更するのかを考え、適切な変換方法を選択するようにしましょう。

更新履歴

2020年9月15日
ページを公開。

参考文献・ウェブサイト

当ページの作成にあたり、以下の文献およびウェブサイトを参考にさせていただきました。

文献
なし
サイト
なし