アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelの数式で、「ある特定の月日が含まれるかどうか」をチェックしたいです。
ある特定の月日というのは固定です。

例えば、A1セルとB1セルにそれぞれ年月日が入力されていて(A1<B1)、その二つの年月日の間の期間内に3月14日が含まれるかということをチェックするのだとすると、次のような結果になってほしいということです。(A1またはB1が3月14日である場合はTrue)

A1セル   B1セル   結果
2020/3/13 2020/3/15 True (2020/3/14が含まれる。)
2020/3/15 2020/12/31 False
2020/3/31 2021/3/14 True (2021/3/14が含まれる。)
2019/3/15 2020/3/13 False
2018/3/15 2020/3/13 True (2019/3/14が含まれる。)
2020/2/29 2021/2/28 True (2020/3/14が含まれる。) 

できるだけ簡単な数式ではどのようなものになるのでしょうか。
A1セル、B1セルには、必ず、A1<B1となる年月日が入力されている、という条件で結構です。

質問者からの補足コメント

  • どう思う?

    「日付は全てシリアル値」とか「両端を含むかどうか」という問題はかまいませんが、ご回答の
    =AND(A1<特定日,特定日<B1)
    だと、年を特定しなくはならなくないですか?

    =AND(A1<3月14日,3月14日<B1)
    のような書き方はできないと思うので、そこをなんとかうまく書く必要があると思います。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/09/13 18:19

A 回答 (8件)

期間内に特定のある日を求めるのは、


 =AND(特定日>=開始日,特定日<=終了日)
で求めることができます。

ここで問題になるのが、特定日の指定方法です。
A1の日付が、その年の3月14日よりも前なら当年を指定して、
後ろならば翌年の3月14日を指定すれば、期間内の特定月日に
指定できるようになります。
 =IF(A1<=DATE(YEAR(A1),3,14),DATE(YEAR(A1),3,14),DATE(YEAR(A1)+1,3,14))

これを組み合わせれば、期間内にあるかどうかを判定できます。
=AND(IF(A1<=DATE(YEAR(A1),3,14),DATE(YEAR(A1),3,14),DATE(YEAR(A1)+1,3,14))>=A1,IF(A1<=DATE(YEAR(A1),3,14),DATE(YEAR(A1),3,14),DATE(YEAR(A1)+1,3,14))<=B1)
「Excelの数式で、「ある特定の月日が含」の回答画像3
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2020/09/13 19:31

No1です。



>だと、年を特定しなくはならなくないですか?
ご質問の内容を正しく理解していませんでした。大変申し訳ありません。

既に、他の方の回答で解決しているとは思いますので、遅まきながらですが、一応・・・


どこかのセルに「特定日」を入力するようにしておけば、関数式内での参照回数が多くても記入は一回で済むと思います。
というわけで、添付図では(仮に)C1セルに日付(=シリアル値:年はなんでも良い)を入力すれば、「年」は無視して、その「月日」が含まれるか否かを返しています。
(基本的な考え方はNo3様と同じです)

図では、C2セルに
=AND(A2<=DATE(YEAR(A2)+(A2>DATE(YEAR(A2),MONTH(C$1),DAY(C$1))),MONTH(C$1),DAY(C$1)),DATE(YEAR(A2)+(A2>DATE(YEAR(A2),MONTH(C$1),DAY(C$1))),MONTH(C$1),DAY(C$1))<=B2)
の式を入れて、下方にフィルコピーしてあります。


ついでながら、もしもユーザ定義関数化するのであれば、引数を3つにし、
 func(開始日、終了日、特定日)
のような形式として、特定日はその年とは関係なく「月日」のみを使用するようにしておくなどの方が、特定日を可変にできるので、利用範囲は広くなるのではないかと思います。
「Excelの数式で、「ある特定の月日が含」の回答画像8
    • good
    • 0

回答としてはNo.3さんのもので、解決しているとおもいますが、ご質問者のいう「特定の月日」というのが、たびたび変更されるような状況であれば、No.4さんの「ユーザー関数」を定義する手も必要かもしれません。


できるだけ簡単な数式ということなので、作業領域(添付画像は同一シートですが、別シートでも可)を使って添付画像のように、一定期間の特定月日をリスト化して、その領域に「各年設定日」という名前をつけ、SUMPRODUCT関数を使って判定するという手もあります。
「Excelの数式で、「ある特定の月日が含」の回答画像7
    • good
    • 0

mm326さんって、VBAできちゃう人なんですね!!


私は、てっきり、次のような関数を書くものと思っていました。
=IF(A1<=DATE(YEAR(A1),3,14),DATE(YEAR(A1),3,14),DATE(YEAR(A1)+1,3,14))<=B1

ちなみに、mm326さんが書かれたVBAですが、・・・
変数「d1以降の直近の3月14日」は、必ずd1以降になるので、
条件「d1 <= d1以降の直近の3月14日」を判定するのは無意味(必ず真になる)ですよ!!
    • good
    • 1

A1以降の直近の3/14を求めて、その日付がB1以前であれば、期間内と判断して良いのではないでしょうか。



式にすると・・・
A1以降の直近の3/14<=B1
・・・です。

「A1以降の直近の3/14」の求め方は、No.3さんが「特定日の指定方法」として、提示してくれているので、ここでは省略させていただきます(No.3さん。パクってしまって申し訳ありません。お詫びに、Good付けときました)。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。おっしゃるとおりで、No.3のかたの考えでいいような気がしてきました。

No.3のかたの考え方で、VBAでユーザー定義関数を書いてみました。


Function func_期間内_3月14日(d1 As Date, d2 As Date) As Boolean

Dim d1以降の直近の3月14日 As Date

If d1 <= DateSerial(Year(d1), 3, 14) Then
d1以降の直近の3月14日 = DateSerial(Year(d1), 3, 14)
Else
d1以降の直近の3月14日 = DateSerial(Year(d1) + 1, 3, 14)
End If

If d1 <= d1以降の直近の3月14日 And d1以降の直近の3月14日 <= d2 Then
func_期間内_3月14日 = True
Else
func_期間内_3月14日 = False
End If

End Function

お礼日時:2020/09/13 21:20

こんばんは!



単純にある期間内!というコトであれば簡単だと思いますが、
「特定の日」に関しての「年」に関しては特定できないようなので・・・
お望みの方法とは異なるかもしれませんが、この質問限定の関数(ユーザー定義関数)を作ってみてはどうでしょうか?

Alt+F11キー → メニュー → 挿入 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)通常のワークシート関数と同じ使い方をします。

Function hiduke(c As Range, r As Range, myRng)
 Dim i As Long
 Dim myFlg As Boolean
  For i = c To r
   If Month(i) = Month(myRng) And Day(i) = Day(myRng) Then
    myFlg = True
    Exit For
   End If
  Next i
   If myFlg = True Then
    hiduke = "True"
   Else
    hiduke = "False"
   End If
End Function

画像ではC2セルに
=hiduke(A2,B2,E$2)

という数式を入れフィルハンドルで下へコピーしています。

※ エラー処理は通常の関数のIF関数等を使って行ってください。

※ 保存時は「マクロ有効ブック」で保存してください。m(_ _)m
「Excelの数式で、「ある特定の月日が含」の回答画像4
    • good
    • 0

全ての日付の年を指定して、後はデータから月と日を抜き出して同じ年の日付になるようにして比較しては?

    • good
    • 0

こんばんは



日付は全てシリアル値(エクセルの日付型の値)と仮定してよければ、
 =AND(A1<特定日,特定日<B1)
でいかがでしょうか?
両端が特定日を含んで良いかどうかによって、比較に「=」を含めるかは調整してください。

結果が0、1でもよければ、
 =(A1<特定日)*(特定日<B1)
でもいけると思います。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!