
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となる年月日が入力されている、という条件で結構です。
No.3ベストアンサー
- 回答日時:
期間内に特定のある日を求めるのは、
=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)

No.8
- 回答日時:
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(開始日、終了日、特定日)
のような形式として、特定日はその年とは関係なく「月日」のみを使用するようにしておくなどの方が、特定日を可変にできるので、利用範囲は広くなるのではないかと思います。

No.7
- 回答日時:
回答としてはNo.3さんのもので、解決しているとおもいますが、ご質問者のいう「特定の月日」というのが、たびたび変更されるような状況であれば、No.4さんの「ユーザー関数」を定義する手も必要かもしれません。
できるだけ簡単な数式ということなので、作業領域(添付画像は同一シートですが、別シートでも可)を使って添付画像のように、一定期間の特定月日をリスト化して、その領域に「各年設定日」という名前をつけ、SUMPRODUCT関数を使って判定するという手もあります。

No.6
- 回答日時:
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日」を判定するのは無意味(必ず真になる)ですよ!!
No.5
- 回答日時:
A1以降の直近の3/14を求めて、その日付がB1以前であれば、期間内と判断して良いのではないでしょうか。
式にすると・・・
A1以降の直近の3/14<=B1
・・・です。
「A1以降の直近の3/14」の求め方は、No.3さんが「特定日の指定方法」として、提示してくれているので、ここでは省略させていただきます(No.3さん。パクってしまって申し訳ありません。お詫びに、Good付けときました)。
ご回答ありがとうございます。おっしゃるとおりで、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
No.4
- 回答日時:
こんばんは!
単純にある期間内!というコトであれば簡単だと思いますが、
「特定の日」に関しての「年」に関しては特定できないようなので・・・
お望みの方法とは異なるかもしれませんが、この質問限定の関数(ユーザー定義関数)を作ってみてはどうでしょうか?
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

No.1
- 回答日時:
こんばんは
日付は全てシリアル値(エクセルの日付型の値)と仮定してよければ、
=AND(A1<特定日,特定日<B1)
でいかがでしょうか?
両端が特定日を含んで良いかどうかによって、比較に「=」を含めるかは調整してください。
結果が0、1でもよければ、
=(A1<特定日)*(特定日<B1)
でもいけると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
EXCEL) 二つの列を照合して、あいまい検索をしたい
Excel(エクセル)
-
いつもお世話になっております。 1行目に1ヶ月の日付が記入されていて(関数等は使わず1〜31まで手打
Excel(エクセル)
-
Excel関数について。関数の天才はいませんか? セルA1 とB1の中にそれぞれ数字が入っています。
Excel(エクセル)
-
4
Excelの関数についてお力添えをお願いします。 添付ファイルの関数について教えてください。 スタッ
Excel(エクセル)
-
5
同じ条件で計算を繰り返す
Excel(エクセル)
-
6
エクセルで項目ごとに集計して行列を入れ替える方法を教えてください。 A列に項目、B列に詳細が複数ある
Excel(エクセル)
-
7
エクセルで簡単な自動仕分けがしたいです。
Excel(エクセル)
-
8
エクセル マクロ? VBA? かなり難しいかもです
Excel(エクセル)
-
9
Excelについて教えてください。 図のようにセルの値が21ならば、緑のセルにLと表示します。そして
Excel(エクセル)
-
10
エクセル VBA 2つのコードの結合
Excel(エクセル)
-
11
エクセルの質問です
Excel(エクセル)
-
12
エクセル、 名前の定義に関数を使用すると参照できない
Excel(エクセル)
-
13
Excel、第一、第二、第三、の条件で同順を無くして順位確定する。 Excelのほぼ初心者です。 宜
Excel(エクセル)
-
14
エクセルでのカレンダー作成について エクセル2013を使用してます 半年カレンダーで2月や31日の月
Excel(エクセル)
-
15
Excelでctrl+Aで全選択してdeleteキーを押した時に一部のセルをデリートしたくない
Excel(エクセル)
-
16
エクセル・ピポットテーブルでできる?
Excel(エクセル)
-
17
Excel セル内の最初と最後の改行を削除
Excel(エクセル)
-
18
エクセルのフィルターをかけた時のコピペについて
Excel(エクセル)
-
19
エクセル 特定の列でENTERを押したら次の行のB列を選択
Excel(エクセル)
-
20
A列がない・・・A列が非表示になっているのではなく存在しない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
DATファイルをEXCELで開きたい
-
5
excelで1つのセルだけを分割す...
-
6
エクセルでセルが指定できない
-
7
EXCELでX軸が時間のグラフを作...
-
8
Excel 書式を関数で判断。
-
9
エクセルの計算結果が0になって...
-
10
エクセル 表を大きく、紙いっ...
-
11
エクセル近似曲線(範囲指定)
-
12
エクセルでマウスカーソルの形...
-
13
エクセル: セルの枠を超えて表示
-
14
あるセルに特定の文字列を打つ...
-
15
エクセル指定した範囲からラン...
-
16
エクセル 同じ値を探して隣の...
-
17
エクセルの散布図のX軸に文字...
-
18
EXCELでセル内に打った文字が隠...
-
19
エクセルで、条件に一致した行...
-
20
エクセルで文字入力してEnterキ...
おすすめ情報
「日付は全てシリアル値」とか「両端を含むかどうか」という問題はかまいませんが、ご回答の
=AND(A1<特定日,特定日<B1)
だと、年を特定しなくはならなくないですか?
=AND(A1<3月14日,3月14日<B1)
のような書き方はできないと思うので、そこをなんとかうまく書く必要があると思います。