CSVをインポートしたら、日付のはずなのに並べ替えも日数計算もできない。セルを見ると左寄せになっていて、どうやら文字列として取り込まれたみたいだ。
こうなると一つずつ手入力で直すのは大変ですよね。数百行あるデータなら、なおさらです。
そんなときに使うのがDATEVALUE関数です。文字列として入っている日付を、計算に使えるシリアル値に一発変換してくれます。
この記事では、DATEVALUE関数の基本から、CSVデータの一括変換、DATE関数やVALUE関数との使い分けまで解説します。
DATEVALUE関数とは?文字列の日付をシリアル値に変換する関数
DATEVALUE関数(読み方: デイトバリュー関数)は、文字列形式の日付をシリアル値に変換する関数です。
名前は英語の「date(日付)」+「value(値)」がそのまま関数名になっています。
Googleスプレッドシートでは、日付を内部的に「シリアル値」という数値で管理しています。1899年12月30日を起点にした通し番号で、たとえば「2026/1/1」はシリアル値で「46023」です。
セルに「2026/3/15」と入力すると、通常はスプレッドシートが自動でシリアル値として認識してくれます。ところがCSVインポートや&での文字列結合で「見た目は日付だけど中身は文字列」という状態になることがあります。
DATEVALUE関数は、こうした文字列の日付をシリアル値に変換してくれます。変換すれば、日付の計算や並べ替えができるようになりますよ。
NOTE
文字列かどうかを見分けるコツは、セルの配置です。数値や日付は右寄せ、文字列は左寄せで表示されます。左寄せになっていたら文字列の可能性が高いです。
DATEVALUE関数の基本的な使い方
構文と引数
=DATEVALUE(日付文字列)
引数はひとつだけです。日付を表す文字列をカッコの中に入れます。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 日付文字列 | 必須 | 日付を表す文字列、またはセル参照 |
NOTE
時刻を含む文字列(”2026/3/15 10:00″など)を渡した場合、時刻部分は無視されます。日付部分のシリアル値だけが返ります。
使用例:文字列の日付をシリアル値に変換する
もっともシンプルな使い方です。ダブルクォーテーションで囲んだ日付文字列を指定します。
=DATEVALUE("2026/3/15")
結果は「46097」(シリアル値)です。セルの表示形式が「標準」のままだと数字で表示されます。「表示形式」メニューから「日付」を選べば、「2026/3/15」として表示されますよ。
セル参照でも使えます。A2に文字列「2026/3/15」が入っているとします。
=DATEVALUE(A2)
結果は同じく「46097」です。
さまざまな日付形式に対応しています。
=DATEVALUE("2026/3/15") → 46097
=DATEVALUE("2026-3-15") → 46097
=DATEVALUE("2026年3月15日") → 46097
=DATEVALUE("March 15, 2026") → 46097
スラッシュ区切り・ハイフン区切り・日本語表記・英語表記、いずれもスプレッドシートが日付として認識できれば変換できます。
CSVインポートで文字列になった日付を一括変換する
DATEVALUE関数がもっとも活躍するのは、CSVインポートの場面です。
CSVデータの文字列日付を変換する
他のシステムから出力したCSVをスプレッドシートにインポートすると、日付列が文字列として取り込まれることがよくあります。
A列に文字列の日付が並んでいるとします。B2に次の数式を入れましょう。
=DATEVALUE(A2)
この数式をB列にコピーすれば一括変換できます。変換後のB列をコピーして「値のみ貼り付け」すれば、数式を消してシリアル値だけ残せます。
あとはセルの表示形式を「日付」に変更すれば完了です。
TIP
大量のデータを変換するときは、B列に数式を入れてからB列全体をコピーし、A列に「値のみ貼り付け」すると元のデータを直接置き換えられます。補助列が不要になってすっきりしますよ。
&で結合した日付文字列をシリアル値に変換する
セルの値を&で結合すると、結果は文字列になります。日付として使いたい場合はDATEVALUE関数で変換しましょう。
A1に「2026」、B1に「3」、C1に「15」が入っているとします。
=DATEVALUE(A1&"/"&B1&"/"&C1)
結果は「46097」(2026/3/15のシリアル値)です。
ただしこのケースでは、DATE関数で=DATE(A1,B1,C1)と書くほうがシンプルです。DATEVALUE関数は「すでに日付形式の文字列が存在する」場面で使うのがベストです。
文字列の日付同士で日数差を計算する
文字列のままでは引き算ができません。DATEVALUE関数で変換すれば日数差を計算できます。
A1に「2026/3/1」(文字列)、B1に「2026/4/1」(文字列)が入っているとします。
=DATEVALUE(B1)-DATEVALUE(A1)
結果は「31」(日数差)です。期日管理や経過日数の計算で、元データが文字列のときに使えるパターンです。
DATEVALUE関数のよくあるエラーと対処法
DATEVALUE関数で発生するエラーは、ほとんどが引数の文字列に関する問題です。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE!エラー | 認識できない日付形式 | “2026/3/15″のように認識できる形式に修正する |
| #VALUE!エラー | 空のセルを参照している | =IF(A1="","",DATEVALUE(A1)) で空セルチェック |
| #VALUE!エラー | 余分なスペースが混入 | =DATEVALUE(TRIM(A1)) でスペースを除去 |
| 5桁の数字が表示される | 表示形式が「標準」のまま | 表示形式を「日付」に変更する(正常動作) |
認識できない日付形式のとき
「15/03/2026」のように日/月/年の順番で入力されていると、スプレッドシートのロケール設定によっては正しく認識されないことがあります。
SUBSTITUTE関数で区切り文字を置き換えるか、文字列操作で年/月/日の順に並べ替えてからDATEVALUE関数に渡しましょう。
見えないスペースや制御文字があるとき
見た目は正しい日付なのにエラーが出るときは、スペースや制御文字が混入している可能性があります。
TRIM関数とCLEAN関数で前処理してから変換しましょう。
=DATEVALUE(TRIM(CLEAN(A1)))
TRIM関数は余分なスペースを除去し、CLEAN関数は印刷できない制御文字を除去します。
IFERRORで安全に変換する
変換できない文字列が混在しているときは、IFERRORで囲むとエラーを回避できます。
=IFERROR(DATEVALUE(A1), "")
エラーのときは空白を返します。大量データを一括変換するときに便利です。
DATE関数・VALUE関数・TEXT関数との使い分け
文字列と日付を変換する関数はいくつかあります。目的に応じて使い分けましょう。
| 関数 | 目的 | 使い方の例 |
|---|---|---|
| DATEVALUE | 文字列の日付をシリアル値に変換 | =DATEVALUE("2026/3/15") → 46097 |
| VALUE関数 | 文字列を数値に変換(日付・時刻・数値すべて対応) | =VALUE("2026/3/15") → 46097 |
| TEXT関数 | シリアル値を指定書式の文字列に変換 | =TEXT(46097,"YYYY/MM/DD") → “2026/03/15” |
| DATE関数 | 年・月・日の数値から日付を作成 | =DATE(2026,3,15) → 2026/3/15 |
DATEVALUEとVALUEの違い
VALUE関数は日付文字列にも使えるため、多くの場面でDATEVALUE関数と同じ結果になります。
=DATEVALUE("2026/3/15") → 46097
=VALUE("2026/3/15") → 46097
結果は同じです。ではどう使い分ければいいのでしょうか。
DATEVALUE関数は「日付文字列専用」です。数式を見た人に「この列は日付データを扱っている」という意図が伝わります。確実に日付とわかっている列にはDATEVALUE関数がおすすめです。
一方、VALUE関数は数値も日付も時刻もまとめて変換できます。「何の文字列が入っているかわからない」ときや、数値と日付が混在している列にはVALUE関数が向いています。
もうひとつの違いは、時刻を含む文字列の扱いです。
=DATEVALUE("2026/3/15 10:30") → 46097(日付部分のみ)
=VALUE("2026/3/15 10:30") → 46097.4375(日付+時刻)
DATEVALUE関数は時刻部分を無視して日付のシリアル値だけを返します。VALUE関数は時刻も含めた値を返します。日付だけが必要なときはDATEVALUE関数のほうが安全です。
DATEVALUEとDATE関数の違い
どちらも日付のシリアル値を返しますが、入力が異なります。
- DATEVALUE関数: 文字列の日付を受け取る(例:
=DATEVALUE("2026/3/15")) - DATE関数: 年・月・日の数値を受け取る(例:
=DATE(2026,3,15))
年・月・日がバラバラのセルに入っているならDATE関数を使いましょう。「2026/3/15」のような日付形式の文字列がすでにあるならDATEVALUE関数が適しています。
DATEVALUEとTEXT関数は逆の操作
TEXT関数はシリアル値を文字列に変換する関数です。DATEVALUE関数はその逆で、文字列をシリアル値に戻します。
=TEXT(46097, "YYYY/MM/DD") → "2026/03/15"(文字列)
=DATEVALUE("2026/03/15") → 46097(シリアル値に戻る)
TEXT関数で書式を整えた結果をさらに計算に使いたくなったら、DATEVALUE関数で戻せることを覚えておくと便利です。
まとめ
DATEVALUE関数は、文字列形式の日付をシリアル値に変換する関数です。
ポイントを整理します。
- 構文は
=DATEVALUE(日付文字列)の1引数だけ - CSVインポートで日付が文字列になったときの定番の解決策
- スラッシュ区切り・ハイフン区切り・日本語表記など幅広い形式に対応
- 時刻を含む文字列は日付部分のみ変換(時刻は無視される)
- VALUE関数との違いは「日付専用」であること。意図が明確になる
- 年・月・日がバラバラならDATE関数、文字列がすでにあるならDATEVALUE関数
- TEXT関数はDATEVALUE関数の逆操作
- エラーが出たらTRIM・CLEAN関数で前処理、IFERRORで安全に変換
まずは =DATEVALUE(A2) でCSVデータの文字列日付を変換するところから試してみてください。
