- ベストアンサー
excelで月末日を判定したい
初心者の質問で恐縮ですが、excelで「あるセルに表示された日付が月末日であれば、ある言葉を表示する」ように したいのですが、適当な関数またはその他の方法はありますでしょうか。 いろいろ過去のQ&Aを調べたのですが、「月末日を表示する」方法はあっても、「月末日かどうかを判定する」方法は見付けられないのです。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (7)
- system0002
- ベストアンサー率0% (0/2)
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
お礼
ありがとうございます。 いろいろ高度な方法があるのですね。 今回はNo.3~No.6で教えて頂いた通りExcelの関数が使えるとのことですので、そちらで処理することにしました。 懇切丁寧なご指導ありがとうございました。
- system0002
- ベストアンサー率0% (0/2)
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)
A1にある「年月日」があるとすると =IF(MONTH(A1+1)=MONTH(A1),"","月末日") などのようで。 #その日の次の日(+1した日)が翌月なら,その日は月末日です。というだけの計算です。
お礼
早速ありがとうございます。 大変スマートな考え方に感心しました。
- Cupper-2
- ベストアンサー率29% (1342/4565)
とりあえず分かりやすい方法は 調べたい日付に1を足して、その結果月が変わっていれば月末日と判断する方法でしょう。 すでに回答されている方法などで判断できます。 ポイントは、 日付はシリアル値で扱われていて、 セルの表示形式で日付として表示されている だけと言うところですね。 実はこの方法、閏年を調べることにも応用できます。 (2月29日が2月なら閏年、3月なら閏年ではない)
お礼
ありがとうございます。 判定のための発想(着眼点)や他にも応用できる点について、大変参考になりました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 日付がはいるセルに「ある言葉」を表示することはできませんので、 ↓の画像のようにA2セルに日付を入力した場合、月末なら「月末」と表示させる方法です。 B2セルに =IF(A2=EOMONTH(A2,0),"月末","") (エラー処理はしていません) という数式を入れています。 これでA2セルの日付を色々入れてみてください。 月末の場合だけB2セルに「月末」と表示されます。 尚、当方使用のExcel2003以前のバージョンでは EOMONTH関数を使用するにあたって メニュー → ツール → アドイン → 「分析ツール」にチェックを入れておく必要があります。 参考になれば良いのですが・・・m(_ _)m
お礼
関数EOMONTHにこんな使い方があることに気が付きませんでした。 早速適切なご回答をありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
月末日は年と月によって変わる。その年と月はどうするのか質問に書かないと。 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列に文字列日付ででも入っていると、簡単にはいかないし、実例の説明でもないと回答できない。
お礼
ありがとうございます。 No.4、No.5、No.6などの方法が、あらゆる年のどの月末にもユニバーサルに使えて便利ですので、それらを使わせて頂くことにしました。
ifについては使えると仮定しまして、 式の中で、 月末日を取得してその結果と日付がイコールであれば月末と判定し、ある言葉を表示する という流れになるかと思います。 同じ式の中で作ると難しいようであれば、作業用列をひとつ作って、 そこに月末日を表示して、日付セルと比較すればわかりやすいかと思います。
お礼
ありがとうございます。 いろいろ方法があるのですね。 最初にNo.4さんの方法(貴法の2つ目と同じですね)に気づき、それを使わせて頂いたので、お礼を言うのが遅くなりました。申し訳ありません。