• ベストアンサー

excelで月末日を判定したい

初心者の質問で恐縮ですが、excelで「あるセルに表示された日付が月末日であれば、ある言葉を表示する」ように したいのですが、適当な関数またはその他の方法はありますでしょうか。 いろいろ過去のQ&Aを調べたのですが、「月末日を表示する」方法はあっても、「月末日かどうかを判定する」方法は見付けられないのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

A1に日付があるとして、月末日なら"月末"と表示、それ以外は日にちを表示として =IF(A1=DATE(YEAR(A1),MONTH(A1)+1,0),"月末",DAY(A1)) 「ツール」「アドイン」で「分析ツール」にチェックが必要ですが、こんな方法も =IF(A1=EOMONTH(A1,0),"月末",DAY(A1)) http://www.relief.jp/itnote/archives/000491.php

netorokot
質問者

お礼

ありがとうございます。 いろいろ方法があるのですね。 最初にNo.4さんの方法(貴法の2つ目と同じですね)に気づき、それを使わせて頂いたので、お礼を言うのが遅くなりました。申し訳ありません。

その他の回答 (7)

回答No.8

NO7です。大変申し訳ございません。コード間違えてました。以下の通りです。 Function 月末判定(hiduke As Date) As String Dim lastdays As Variant '月末格納 Dim toshi As Long '年格納 Dim tuki As Long '月格納 Dim niti As Long '日格納 lastdays = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) toshi = year(hiduke) tuki = month(hiduke) niti = day(hiduke) If (toshi < 1) Or (niti < 1) Or (niti > 31) Or (tuki < 1) Or (tuki > 12) Then 月末判定 = "値が間違ってます。" Else '----------------------------------------------------------------- '↓↓↓↓↓↓うるう年の時配列を、うるう年用に変える。↓↓↓↓↓↓ If tuki = 2 Then If (toshi Mod 400 = 0) Or (toshi Mod 4 = 0) And (toshi Mod 100 <> 0) Then lastdays(2) = 29 End If End If '----------------------------------------------------------------- If niti = lastdays(tuki) Then 月末判定 = hiduke & "は月末です。" Else 月末判定 = hiduke & "は月末でない。" End If End If End Function

netorokot
質問者

お礼

ありがとうございます。 いろいろ高度な方法があるのですね。 今回はNo.3~No.6で教えて頂いた通りExcelの関数が使えるとのことですので、そちらで処理することにしました。 懇切丁寧なご指導ありがとうございました。

回答No.7

VBAで出来ますよ。 A1に2010/12/31がある場合 セルをクリックしてダブルクリックして、=月末判定(A1)とするか=月末判定("2010/12/31") として下さい。月末判定できます。フォーマットをもっと詳しく教えてくれたら、もっとダイレクトにできます。 以下のコードをVBE(alt F11 で表示されます。)に貼り付けてください。 Function 月末判定(hiduke As Date) As String Dim lastdays As Variant '月末格納 Dim toshi As Long '年格納 Dim tuki As Long '月格納 Dim niti As Long '日格納 lastdays = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) toshi = year(hiduke) tuki = month(hiduke) niti = day(hiduke) If (toshi < 1) And (niti < 1) And (niti > 31) And (tuki < 1) And (tuki > 12) Then MsgBox "値が間違ってます。", vbCritical Else '----------------------------------------------------------------- '↓↓↓↓↓↓うるう年の時配列を、うるう年用に変える。↓↓↓↓↓↓ If tuki = 2 Then If (toshi Mod 400 = 0) Or (toshi Mod 4 = 0) And (toshi Mod 100 = 0) Then lastdays(2) = 29 End If End If '----------------------------------------------------------------- If niti = lastdays(tuki) Then 月末判定 = hiduke & "は月末です。" Else 月末判定 = hiduke & "は月末でない。" End If End If End Function

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.6

A1にある「年月日」があるとすると =IF(MONTH(A1+1)=MONTH(A1),"","月末日") などのようで。 #その日の次の日(+1した日)が翌月なら,その日は月末日です。というだけの計算です。

netorokot
質問者

お礼

早速ありがとうございます。 大変スマートな考え方に感心しました。

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.5

とりあえず分かりやすい方法は  調べたい日付に1を足して、その結果月が変わっていれば月末日と判断する方法でしょう。 すでに回答されている方法などで判断できます。 ポイントは、  日付はシリアル値で扱われていて、  セルの表示形式で日付として表示されている だけと言うところですね。 実はこの方法、閏年を調べることにも応用できます。 (2月29日が2月なら閏年、3月なら閏年ではない)

netorokot
質問者

お礼

ありがとうございます。 判定のための発想(着眼点)や他にも応用できる点について、大変参考になりました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! 日付がはいるセルに「ある言葉」を表示することはできませんので、 ↓の画像のようにA2セルに日付を入力した場合、月末なら「月末」と表示させる方法です。 B2セルに =IF(A2=EOMONTH(A2,0),"月末","") (エラー処理はしていません) という数式を入れています。 これでA2セルの日付を色々入れてみてください。 月末の場合だけB2セルに「月末」と表示されます。 尚、当方使用のExcel2003以前のバージョンでは EOMONTH関数を使用するにあたって メニュー → ツール → アドイン → 「分析ツール」にチェックを入れておく必要があります。 参考になれば良いのですが・・・m(_ _)m

netorokot
質問者

お礼

関数EOMONTHにこんな使い方があることに気が付きませんでした。 早速適切なご回答をありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

月末日は年と月によって変わる。その年と月はどうするのか質問に書かないと。 A1セルに年月日が入っているとして、そのセルの値は日付シリアル値(注)として、その部分はA1セルの年と月を使うなら B1セルに=IF(A1=DATE(YEAR(A1),MONTH(A1)+1,0),"月末","") と入れて下方向に式を複写する。 これもエクセル関数の本を勉強すれば、本に書いてある手法ですよ。 例 A列     B列 2011/8/1 2011/8/30 2011/8/31 月末 2011/9/30 月末 (注)エクセルの日付シリアル値について知らないのでないかとおもう。Googleででも、「日付シリアル値」で照会し勉強のこと。非常に大切なことです。 もしA列に文字列日付ででも入っていると、簡単にはいかないし、実例の説明でもないと回答できない。

netorokot
質問者

お礼

ありがとうございます。 No.4、No.5、No.6などの方法が、あらゆる年のどの月末にもユニバーサルに使えて便利ですので、それらを使わせて頂くことにしました。

noname#138894
noname#138894
回答No.1

ifについては使えると仮定しまして、 式の中で、 月末日を取得してその結果と日付がイコールであれば月末と判定し、ある言葉を表示する という流れになるかと思います。 同じ式の中で作ると難しいようであれば、作業用列をひとつ作って、 そこに月末日を表示して、日付セルと比較すればわかりやすいかと思います。