🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel DATEVALUE と TIMEVALUE — テキストとして閉じ込められた日付と時刻を救い出す

|

Excel DATEVALUE と TIMEVALUE — テキストとして閉じ込められた日付と時刻を救い出す

要点 — Excel はすべての日付をシリアル値(1900 年 1 月 1 日から数えた日数)として 格納します。あなたが目にする日付は、その数値が日付書式をまとったものです。日付が テキストとして到着すると、それはシリアル値ではない —— だから時系列で並べ替えも、 引き算も、日付関数への受け渡しもできません。DATEVALUE はテキストの日付をそのシリアル値 に解析します: =DATEVALUE("2025-01-01")45658(セルを日付書式にすると日付として 見えます)。TIMEVALUE は時刻に対して同じことをし、1 日の端数を返します: =TIMEVALUE("2:30 PM")0.6041…。心得ておくべき唯一の罠は、"03/04/2026" の ような曖昧な文字列に対して DATEVALUE地域設定に従うため、3 月 4 日とも 4 月 3 日 とも読み取りうることです。

=DATEVALUE("2025-01-01")           ' -> 45658   (シリアル値。日付書式にすると 2025-01-01 と表示)
=TIMEVALUE("2:30 PM")              ' -> 0.604167 (1 日の端数)
=DATEVALUE("2-Jul-2026") + TIMEVALUE("14:30")   ' 本物の日付時刻シリアル値

状況はいつも同じです。エクスポートから日付の列を受け取ると、それらはセルのに 並び、日付らしい操作が何も効きません —— アルファベット順で "2/03" より "1/12" が 前に来て、=B2-A2#VALUE! を投げ、DATEDIF は拒否します。日付に見えるのに テキストなのです。DATEVALUETIMEVALUE は、その偽者を本物のシリアル値に戻します。 このガイドでは、基本となる考え方、誰もが引っかかる地域依存の罠、そして別のツールでしか 文字列を解析できない場面を扱います。

このガイドで学べること

  • 基本となる考え方: 日付はシリアル値。テキストの日付は偽者
  • テキスト日付の見分け方(そしてなぜ並べ替えと計算が壊れるのか)
  • DATEVALUE03/04/2026 にまつわる地域依存の曖昧さの罠
  • TIMEVALUE、1 日の端数、そして日付と時刻の結合
  • DATEVALUE が文字列を解析できないとき —— そして代わりに何を使うか
  • 判断のしどころ: DATEVALUEDATE(LEFT,MID,RIGHT) か区切り位置か

基本となる考え方: 日付は衣装をまとった数値

2025-01-01 とセルに入力すると、Excel は 45658 —— その基準日からの日数 —— を格納し、 それを日付書式で着飾らせます。だからこそ日付の算術が成り立ちます。end - start は二つの 日数の引き算にすぎず、EOMONTHNETWORKDAYSDATEDIF はすべて裏側のシリアル値に 対して働きます。

テキストの日付はそれをすべて素通りします。テキストとして格納された "2025-01-01" は 文字の並び 2 0 2 5 - 0 1 - 0 1 であって、裏に 45658 はありません。だからその仕組みは 何一つ動きません。

' A2 にはテキスト "2025-01-01" が入っている
=A2 + 1        ' -> #VALUE!   (文字列に 1 は足せない)
=DATEVALUE(A2) ' -> 45658     (これで本物のシリアル値。=+1 で翌日になる)

このイメージを持ってください。DATEVALUE は日付の見た目を変えるのではなく、その そっくりさんに本物の数値を裏側に与えます。 その後に日付書式を適用すれば、45658 が 再び 2025-01-01 として表示されます。

テキスト日付の見分け方

テキストの数値と同じ兆候に加え、日付に特有のものがいくつかあります。

  • 値が左揃えになっている(本物の日付は右揃え)。
  • 並べ替えが時系列ではなくアルファベット順 —— 年に関係なく "03/…""11/…" より 前に来る。
  • =後の日付 - 前の日付 が日数ではなく #VALUE! を返す。
  • DATEDIFEOMONTHNETWORKDAYS、日付フィルターがエラーになるか、各文字列を無関係な ラベルとして扱う。

日付の計算がおかしいなら、証明されるまではテキスト日付だと想定しましょう。

DATEVALUE と地域依存の曖昧さの罠

DATEVALUE は、Excel が現在の地域設定で日付として認識するあらゆる文字列を読み取り ます。その最後の一節が罠のすべてです。"03/04/2026" を考えてみましょう。

=DATEVALUE("03/04/2026")   ' 米国設定  -> 2026 年 3 月 4 日
=DATEVALUE("03/04/2026")   ' 英国設定  -> 2026 年 4 月 3 日

同じ文字列、違う日付、そして警告するエラーは出ません —— ブックは別のマシンでは 静かに違う意味になるだけです。防御策は二つあります。

  • 曖昧さのない入力を優先する: ISO 形式 "2026-07-02" や月名を綴った "2-Jul-2026" は どこでも同じに解析されます。
  • 解析を自分で制御するなら、DATEVALUE の推測に頼らない —— DATE(year, month, day) で文字列を分解し、どの部分が月かをあなたが決めます(後述)。

DATEVALUE は文字列中の時刻部分も無視し(それには TIMEVALUE を使います)、日付として 読めないテキストには #VALUE! を返します。

TIMEVALUE と 1 日の端数

Excel は時刻を 24 時間の 1 日の端数として格納します。真夜中は 0、正午は 0.5、 午後 6 時は 0.75 です。TIMEVALUE はテキストの時刻をその端数に解析します。

=TIMEVALUE("2:30 PM")     ' -> 0.604167   (14.5 / 24)
=TIMEVALUE("23:15")       ' -> 0.968750

本物の日付時刻はシリアル値 + 端数なので、二つのパーサーを足し合わせることで日付時刻を 組み立て直せます。

' A2 にはテキスト "2026-07-02 14:30" が入っている
=DATEVALUE(LEFT(A2, 10)) + TIMEVALUE(MID(A2, 12, 5))   ' -> 本物の日付時刻シリアル値

結果を yyyy-mm-dd hh:mm で書式化すれば、他のタイムスタンプと同じように引き算・並べ替え・ 比較できる値になります。

DATEVALUE で対処できないとき

DATEVALUE は、Excel がすでに日付として認識している書式しか解析しません。本当に非標準的な 文字列では失敗します —— "20260702"(区切りなし)、"July2026"(日がない)、 "Q3 2026" —— そして値がすでに本物の日付である場合は無用にエラーを出します(それは テキストではなく数値なので、解析するものがないのです)。そうしたケースには、代わりに構造的 解析に手を伸ばしましょう。

' "20260702" -> 位置で各部分を取り出して日付を組み立て直す
=DATE(LEFT(A2,4), MID(A2,5,2), RIGHT(A2,2))   ' -> 2026-07-02、曖昧さなし

DATE(year, month, day) は三つの数値を取り、どの部分が月かをまったく推測せずに シリアル値を組み立てます —— だからこそ、書式が固定だが変わっている場合には DATEVALUE に 勝ります。抽出側については LEFT / RIGHT / MID を参照して ください。

判断のしどころ

  • 標準的で曖昧さのないテキスト日付(ISO または月名綴り)→ DATEVALUE がすっきりして ライブに機能します。変化するテキストを再解析し続ける数式に向いています。
  • dd/mmmm/dd か曖昧なもの → DATEVALUE のロケール推測を信用せず、 DATE(LEFT,MID,RIGHT) で分解して順序を自分で制御します。
  • 一度きりの列のクリーンアップ[データ] → [区切り位置] → [完了] で、日付列の 書式(DMY/MDY)を選べば、数式なしでその場で変換します。
  • 繰り返しのインポート → 型を元データまたは Power Query で直します。毎週作り直す DATEVALUE の列を出荷してはいけません。

日付が本物のシリアル値になれば、日付ツールキット全体が開けます —— 日数の計算、月末を 求める EOMONTH、営業日の NETWORKDAYS、年齢や在籍期間の DATEDIFDATEVALUE は、 テキストの日付をその世界入れる、まさに回転式改札口なのです。

ExcelMaster はどう役立つか

テキスト日付が特に厄介なのは、それが正しく見えるからです —— 合計や並べ替えが静かに 狂うまで、バグは隠れています。ExcelMaster はそのパターン(引き算できない日付、 アルファベット順になる並べ替え)を認識し —— そして決定的なことに —— 曖昧さをあなたの 代わりに処理します。列が dd/mmmm/dd かをデータそのものから読み取り、正しい解析で 変換します。標準的な文字列には DATEVALUE を、変わったものには DATE(...) 分解を使います。 Excel がどの国の日付慣習を想定したかに四半期末を賭けることなく、計算できる本物のシリアル値 が手に入ります。

よくある質問

Excel でテキストを日付に変換するには?

=DATEVALUE(A1) を使い、セルを日付書式にします。数式なしで列全体を変換するなら、 [データ] → [区切り位置] → [完了] で日付書式を選びます。非標準の文字列には、 =DATE(LEFT,MID,RIGHT) で組み立て直します。

なぜ DATEVALUE が #VALUE! を返すのですか?

その文字列が、あなたの地域で Excel が日付として認識する書式になっていないからです —— たとえば区切りのない "20260702"、日が欠けている、あるいは値がすでに本物の日付 (数値なので変換するものがない)。変わった書式には DATE(...) 分解を使いましょう。

なぜ私の日付が正しく並べ替えられないのですか?

それらが本物の日付ではなくテキストなので、アルファベット順に並べ替えられるからです ("11/…" より "03/…" が前に来る)。DATEVALUE または区切り位置で変換すれば、Excel は 裏側のシリアル値で並べ替えます。

TIMEVALUE は何を返すのですか?

1 日の端数です: =TIMEVALUE("2:30 PM")0.6042(14.5 ÷ 24)。DATEVALUE の 結果に足せば、完全な日付時刻シリアル値を組み立てられます。

DATEVALUE と DATE、どちらを使うべきですか?

DATEVALUEテキスト文字列を解析し、書式をロケールから推測します。 DATE(year, month, day)三つの数値から曖昧さなく日付を組み立てます。テキストの順序が 固定だが変わっているとき、または dd/mmmm/dd かで誤読されうるときは、 (LEFT/MID/RIGHT と併せて)DATE(...) を使いましょう。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-02。

関連ガイド: Excel TEXT · Excel VALUE と NUMBERVALUE · Excel LEFT, RIGHT と MID · Excel FIND と SEARCH · Excel SUMIFS