ExcelのMONTH関数が設定できない原因と対処法!日付が文字列になっているときの直し方

ExcelのMONTH関数が設定できない原因と対処法!日付が文字列になっているときの直し方
ExcelのMONTH関数を使って日付から「月」を取り出したいときはないでしょうか。

けど、そんな中で悩むことは、

・MONTH関数を入れたら #VALUE! エラーになる
・見た目は日付なのに、なぜか月が取り出せない
・どこを直せばいいのか分からない

ですよね。

今回はそんなお悩みを解決する

・ExcelのMONTH関数が設定できない原因と対処法(文字列の日付を変換する方法)

についてまとめます!

完成イメージ

MONTH関数がエラーになるいちばんの原因は、セルの中身が「日付」ではなく「文字列」になっていることです。
見た目が 2025/4/1 でも、中身が文字列だと MONTH関数は月を返せず #VALUE! エラー になります。
今回は
・文字列の日付を正しい日付に変換して、MONTH関数で月を取り出せるようにする方法
をゴールにします。
文字列かどうかの見分け方から、数式での変換、区切り位置での一括変換までを順番に進めます。

完成イメージ
上の画像が完成形です。文字列だった日付を変換し、E列にMONTH関数で「月」が表示されるようになりました。

なお、VBAで一括変換する方法と、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。
早速実装して試してみましょう!

STEP1. 元データを用意する

まずは月を取り出したい一覧を用意します。
今回のサンプルは、日付・担当・商品・金額を並べた受注データです。
A列が日付、B列が担当、C列が商品、D列が金額、そしてE列がこれから作る「月」の列です。
ここでA列をよく見てください。
2025/4/1 のように右寄せになっている行は「正しい日付」です。
一方、2025/10/14 のように左寄せになっている行は、見た目が同じでも中身が「文字列」です。
この違いが、次のSTEPでエラーの原因になります。
E列は空のままにしておきましょう。
元データの受注表

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

日付 担当 商品 金額 月
2025/4/1 佐藤 ノートPC 128000
2025/5/12 鈴木 モニター 32000
2025/6/3 高橋 キーボード 4800
2025/7/8 田中 マウス 2200
2025/8/19 伊藤 ノートPC 128000
2025/9/2 渡辺 プリンタ 29800
2025/10/14 佐藤 キーボード 4800
2025/11/5 鈴木 モニター 32000
2025/12/1 高橋 ノートPC 128000
2026/1/9 田中 マウス 2200
2026/2/17 伊藤 モニター 32000
2026/3/4 渡辺 キーボード 4800

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. MONTH関数を入れてみる

E列に月を出すため、E2セルに =MONTH(A2) と入力します。
=MONTH(A2) は「A2セルの日付から月だけを取り出す」数式です。
E2からE13までコピーすると、正しい日付の行は 4・5・6… と月が返ります。
ところが、文字列になっている行は #VALUE! エラー になってしまいました。
同じ「日付に見える」列なのに結果がそろわないのが、今回の症状です。
MONTH関数でエラーになった状態
数式はセルを選んで数式バーに入力します。
E5セルに =MONTH(A5) を入れた画面がこちらです。
入力中は引数のヒントが表示されるので、引数の順番を確認しながら進められます。
MONTH関数の入力画面

STEP3. 文字列かどうかを確かめる

#VALUE! になる原因は、セルの中身が日付ではなく文字列になっていることです。
今回はF列に =ISNUMBER(A2) を入れて、中身が数値かどうかを調べてみます。
数値(=正しい日付)なら TRUE、文字列なら FALSE が返ります。
結果は、A列の7件がTRUE(日付)、5件がFALSE(文字列)でした。
見た目では分からなくても、ISNUMBERを使えばひと目で見分けられます。
ISNUMBERで数値か文字列かを判定

STEP4. 対処法① 数式で文字列を日付に変換する

まずは数式で変換する方法です。
文字列を日付(シリアル値)に変えるには VALUE関数 や DATEVALUE関数 を使います。
ただし、今回の文字列には先頭の余分な空白や「.」区切りが混ざっています。
そこで、空白を消す TRIM関数 と、区切り文字を「/」に置き換える SUBSTITUTE関数 を組み合わせます。
E列の数式を次のように書き換えましょう。

=MONTH(VALUE(SUBSTITUTE(TRIM(A2),".","/")))

これで、文字列の行も含めてすべての月が表示されるようになりました。
ただし数式が長くなるので、一時的に確認したいとき向けの方法です。
数式で月を出せた状態
実際の入力画面がこちらです。
文字列を TRIM → SUBSTITUTE → VALUE の順に変換してから、MONTH に渡しています。
VALUEとTRIMを組み合わせた数式の入力画面

STEP5. 対処法② 区切り位置で一括変換する

数式で包むより、A列そのものを正しい日付に直すほうが後々ラクです。
文字列の日付は、「区切り位置」機能で一括変換できます。
手順は次のとおりです。
A列(A2:A13)を選択します。
データ タブ → 区切り位置 をクリックします。
「元のデータの形式」はそのまま 次へ、区切り文字もそのまま 次へ。
「列のデータ形式」で 日付(YMD) を選び、完了 をクリックします。
これでA列の文字列が、右寄せの正しい日付に変わります。
なお、区切り位置のダイアログは画像に写せないため、下の画像は変換後の状態を掲載しています。
A列がすべて日付になったので、E列も =MONTH(A2) のシンプルな数式で月が出るようになりました。
区切り位置で日付に変換した後の状態

STEP6. 対処法③ VBAで一括変換する

毎回同じ変換作業をするなら、VBAのCDate関数でまとめて日付に変換するのがおすすめです。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。

Sub TextToDate()
    Dim r As Long
    For r = 2 To 13
        Cells(r, 1).Value = CDate(Trim(Replace(Cells(r, 1).Value, ".", "/")))
    Next r
    Range("E2").Formula = "=MONTH(A2)"
    Range("E2").AutoFill Destination:=Range("E2:E13")
End Sub

実行すると、A列の文字列がまとめて日付に変わり、E列に月が入ります。
ボタンに登録しておけば、クリック1つで変換できるようになります。

タカヒロ

タカヒロ
CDate は「文字列を日付に変換する」関数です。
TRIM と Replace で余分な空白や「.」をならしてから渡しているのがポイントです。
むずかしく見えますが、一度作っておけば毎回の変換作業がなくなるのでカンタンですね。


VBAで一括変換した結果

3つの対処法の比較

それぞれ向いている場面が違います。
状況に合わせて選んでみてください。

対処法 やること 向いている場面 注意点
① 数式で変換 =MONTH(VALUE(SUBSTITUTE(TRIM(A2),”.”,”/”))) 元のデータを変えずに月だけ見たいとき 数式が長くなる
② 区切り位置 データ タブ → 区切り位置 → 日付(YMD) A列の文字列をまとめて日付に直したいとき 1列ずつ実行する
③ VBA(CDate) CDate で一括変換 毎回同じ変換作業をするとき マクロ有効ブック(.xlsm)で保存する
POINT

「MONTH関数が設定できない」と感じたら、まずセルの中身が数値(日付)か文字列かを疑いましょう。
一時的に確認するなら数式、根本的に直すなら区切り位置、繰り返すならVBAがおすすめです。

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったように動かないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
MONTHが #VALUE! になる セルの中身が文字列(先頭の空白や「.」区切りを含む) TRIM で空白を消し、SUBSTITUTE で「.」を「/」に置換してから VALUE に渡す
MONTHが #NUM! になる 20250902 のような8桁の数字が文字列になっている DATEVALUE では変換できないため、区切り位置か LEFT/MID で年・月・日に分ける
見た目は日付なのに数値にならない 文字列のまま入力されている セルを選び、数式バーの表示を確認する(文字列はそのまま表示される)
=MONTH(2025/7/8) と書いたら2月と表示された スラッシュが割り算として計算されている =MONTH(DATE(2025,7,8)) か =MONTH(DATEVALUE(“2025/7/8”)) にする
全角の日付が変換できない 全角数字・全角スペースが混ざっている TRIM で前後の全角スペースを除去する。数式で直らないときは区切り位置で変換する

関数の説明

今回登場した関数の概要です。
書式と役割を押さえておきましょう。

MONTH関数(マンス)

書式 =MONTH(シリアル値)
できること 日付から月(1〜12)を取り出します。
戻り値 月(1〜12の数値)
こんなときに 日付の列から月ごとの集計をしたいとき。
注意 引数が文字列だと #VALUE! になることがあります。まずセルの中身を確認しましょう。
=MONTH(A2)

VALUE関数(バリュー)

書式 =VALUE(文字列)
できること 数値を表す文字列を数値に変換します。
戻り値 数値(日付ならシリアル値)
こんなときに 文字列になった日付を、計算できる数値に戻したいとき。
注意 余分な空白や「.」区切りがあると変換できないため、TRIMやSUBSTITUTEと組み合わせます。
=VALUE(A2)

DATEVALUE関数(デートバリュー)

書式 =DATEVALUE(日付文字列)
できること 日付を表す文字列をシリアル値に変換します。
戻り値 日付のシリアル値(数値)
こんなときに 文字列の日付を、MONTHやDATEDIFで使える日付にしたいとき。
注意 8桁の数字(20250902)は日付と解釈されず、#VALUE! になります。
=DATEVALUE("2025/7/8")

TRIM関数(トリム)/SUBSTITUTE関数(サブスティテュート)

TRIMの書式 =TRIM(文字列)
SUBSTITUTEの書式 =SUBSTITUTE(文字列, 検索文字列, 置換文字列)
できること TRIMは前後の余分な空白を削除、SUBSTITUTEは指定した文字を別の文字に置き換えます。
こんなときに CSVなどから取り込んだ日付に、空白や記号が混ざっているとき。
注意 TRIMは先頭・末尾の余分な空白(全角スペースを含む)を削除します。
=TRIM(A2)

完成

文字列だった日付を正しい日付に変換し、E列にすべての月が表示されました。
思ったとおりに動きましたか?
=MONTH(A2) がそのまま使えるようになったので、あとは月ごとの集計にも応用できます。
中身が「文字列」かどうかを意識するだけで、原因の切り分けがぐっとラクになります。
完成した表

さいごに

いかがでしょうか。

今回は、

・ExcelのMONTH関数が設定できない原因と対処法(文字列の日付を変換する方法)

についてまとめました。

まずは今回のサンプル表で、ぜひ一度試してみてください。
「MONTHがエラーになる」と感じたら、まず数式バーでセルの中身を確認するのが近道です。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image