こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

日付関数について教えてください

エクセル関数で困っています

セルAV23=IF(AW23="","",MID(AW23,5,2))
このセルにAW23セルの日付より3か月後を「00」表示しています

セルCX23=IF(AV23="MONTH(NOW())-1","1","")
としましたが意図する表示ができません

AV23セルに当月より-1の月の場合”1” それ以外の月は””(空白)
としたいのですがうまくいきません

ご教授よろしくお願いいたします

投稿日時 - 2018-07-05 22:33:54

QNo.9515551

困ってます

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

質問者と回答者のコミュニケーションにズレがあり混乱しているようです。
回答No.8への補足に以下のような記述があり、これを元にすれば簡単に解決できるでしょう。
----------ここから----------
AU23:(20180705)8桁のテキストです
AW23: AU23の3カ月後の末日を表示(関数)
AV23: AW23の月を2桁表示(関数)

CX23 : AV23またはAW23の月と当月が同じ場合に(1)を表示
    それ以外は(空白) (年は関係ありません)
----------ここまで----------
AW23とAV23は文字列のようですからIF関数の論理式を文字列同士の比較または数値同士の比較にすれば良いでしょう。
AV23またはAW23の何方と現在の月を比較するかも統一することが望ましいことです。AV23は他のセルで参照していなければ無駄な数式を設定していますのでAW23の月と現在の月を比較する方が合理的です。
CX23の数式は下記で良いと思います。
=IF(MID(AW23,5,2)*1=MONTH(NOW()),1,"")
MID(AW23,5,2)で月数の2桁を文字列として切り出しています。
MONTH関数で求められる値は数値なのでAW23から切り出された2桁の数字の文字列を数値化しないと正しい比較になりません。
数字だけの文字列を数値化するにはVALUE関数を使いますが他に1を乗ずる方法や0を加算する方法もあります。
尚、AW23に設定されている数式は変更できないものでしょうから計算結果をそのまま使えば問題ないでしょう。

投稿日時 - 2018-07-07 08:44:53

お礼

わけのわからない質問にご親切にご回答ありがとうございました。

投稿日時 - 2018-07-07 09:37:40

ANo.13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(13)

ANo.12

今晩は回答No.7のchayamatiです。
先ず日付の実態をご理解ください
・日付は1900/1/1を0としての経過日数で、小数点以下は時、分、秒 です
 実数とよく似ているようですが、繰り上がり違います
 12月ので年に、月末(28,29,30,31)月に繰り上がります。
>セルAV23=IF(AW23="","",MID(AW23,5,2))
 セルAW23表示形式を数値に変更してください、AV23の結果がご理解できます
>このセルにAW23セルの日付より3か月後を「00」表示しています
 厳密には3か月後の月初、3か月後の20日、3か月後の月末
>セルCX23=IF(AV23="MONTH(NOW())-1","1","")
 数値または日時を文字列変換するにはTEXT関数です
 =MONTH(NOW()) または =MONTH(TODAY())

投稿日時 - 2018-07-06 23:15:22

補足

ありがとうございます

投稿日時 - 2018-07-07 00:02:15

ANo.11

>あとはCXに当月とAVが同じ時に「1」を表示させるだけなのですが
当月とは、今日を含む月のことですね?

ならば、
=IF(MONTH(NOW())=MONTH(AV22),1,"")
ということと思います。

投稿日時 - 2018-07-06 22:36:42

補足

ありがとうございます
しかしうまく表示されません

AV22=IF(AW23="","",MID(AW23,5,2))

という関数で「07」と2桁表示です

よろしくお願いいたします

投稿日時 - 2018-07-06 23:38:13

ANo.10

No.9 に補足

式だけだとわかりにくいかもしれなので
補足しします。

AW22の計算式は、
AU22の年、月を使い、課題年月の15日を求めます。
そこに、120日を加算することで4か月後の15日前後が算出されます。
この年月の1日(つまり課題年月の4か月後の1日)を求め
その前日(つまり課題年月の3か月後の末尾)を求めています。

投稿日時 - 2018-07-06 22:23:59

ANo.9

こうゆうことでしょうか?

AW22
=DATE(YEAR(DATE(LEFT(AU22,4),MID(AU22,5,2),15) + 120),MONTH(DATE(LEFT(AU22,4),MID(AU22,5,2),15) + 120),1)-1

AV22
=AW22
書式設定 mm

AV23
=IF(MONTH(NOW())=MONTH(AV22),1,"")

投稿日時 - 2018-07-06 21:44:47

補足

ありがとうございます

画像をアップしようとしましたが補足では無理のようですね

上記のところまでは出来ています

あとはCXに当月とAVが同じ時に「1」を表示させるだけなのですが

よろしくお願いいたします

投稿日時 - 2018-07-06 22:23:29

ANo.8

ANo.5です。

AW23に入っている日付とは、日付そのものではなく、文字列なんですね?
話を整理しましたが、これで合っていますか?

・セルAW23には、日付が8ケタの数字で構成された文字列で入っている(例:20190306)。
・セルAV23には、AW23の日付の3ヶ月後の月を表示したい(例:6)、AW23が空白なら空白。
・セルCX23には、先月の月と、AV23が一致していれば1、そうでなければ空白または0を表示したい(年の違いは無視)。


AV23:=IF(AW23="","",MONTH(EDATE(TEXT(AW23,"0000!/00!/00")*1,3)))
CX23:=IF(AV23=MONTH(EDATE(NOW(),-1)),1,"")

違う様でしたら、具体的な例を複数パターン挙げてください。
その際、式は無い方がこちらの混乱が無くてよいです。

投稿日時 - 2018-07-06 12:09:07

補足

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

文字で表現しますと以下のようになりますが
ご理解いただけますでしょうか?
よろしくお願いいたします

AU23:(20180705)8桁のテキストです
AW23: AU23の3カ月後の末日を表示(関数)
AV23: AW23の月を2桁表示(関数)

CX23 : AV23またはAW23の月と当月が同じ場合に(1)を表示
     それ以外は(空白) (年は関係ありません)

投稿日時 - 2018-07-06 17:43:41

ANo.7

今日は
>セルCX23=IF(AV23="MONTH(NOW())-1","1","")
としましたが意図する表示ができません
>----------------------------------------------------------------------------------------------
エクセルは数字だけの文字列は取り扱い出来ません
セルCX23=IF(AV23=MONTH(NOW())-1,1,"")

投稿日時 - 2018-07-06 11:44:20

ANo.6

質問の表現が厳密でないように思うので、もう一度、質問しなおしてはどうかな。
ーー
MONTH関数は、年月の月数字のみを問題にする関数で、12月から翌年1月になった時、月が+1進んだことを計算するのは複雑(すなわち、年の要素も加味しないとならないと思う)。初心者は、年月について、安易に引き算、足し算的な計算式を、よく慣れないと、自作してはならないとは思う。
ーー
DATEDIFという関数はあるが
https://support.office.com/ja-jp/article/2-%E3%81%A4%E3%81%AE%E6%97%A5%E4%BB%98%E9%96%93%E3%81%AE%E5%B7%AE%E5%88%86%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B-8235e7c9-b430-44ca-9425-46100a162f38
完全な月数を返す、とある。この意味わかる?
ーーー
質問の月は
(1)名称的な月(例、月数字が変わると翌日でも+1と)を考えるのか
(2)実質的な月なのか(結構定義がむつかしいように思う)
質問に書いてない。
初心者の、うまく行かない自作の関数を質問に掲げる(こういう人が多い)よりも、自分のデータをよく観察して、数個の実例の(開始日と終期の対の)日付を質問に挙げて、その場合こういう結果を出したい、という質問をすべきだ。
ーー
=DATEDIF(A1,B1,"M")
=DATEDIF(A1,B1,"YM")
というのがある。本件で、使えるかな。特に後者。
ーー
エクセルは+1月した年月を計算すると、正しく計算してくれるから、(13月=DATE(YEAR(A1),MONTH(A1)+1,1)などとしない)
それとの比較をすれば確実だが、2,3,4カ月先もあれば複雑になる。
ーー
https://support.microsoft.com/ja-jp/help/214134/how-to-calculate-the-number-of-months-between-two-dates-in-excel
Excel で 2 つの日付の間の月数を計算する方法
(本件解決に、より近い解説だと思うので)でもよく読んで、考え直したらどうか。

投稿日時 - 2018-07-06 09:42:06

補足

どう質問したらよいかが分からずお手数おかけします

要するにあるセルに(20180706)と記載がある場合

=IF(AU109="","",VALUE(TEXT(EOMONTH(TEXT(AU109,"0-00-00"),IF(RIGHT(AU109,2)-16<0,2,3)),"yyyymmdd"))


別のセルに現在と同月の場合(1)としそれ以外は(0)または(空白)
としたかったのですがわかりにくかったですね

お手数ですがよろしくお願いいたします

投稿日時 - 2018-07-06 10:48:41

ANo.5

恐らく、こういう事がやりたいのでしょう。
AV23:=IF(AW23="","",MONTH(EDATE(AW23,3)))
CX23:=IF(AV23=MONTH(EDATE(NOW(),-1)),1,"")

「日付のシリアル値」やEDATE関数について調べてみてください。

投稿日時 - 2018-07-06 08:44:14

ANo.4

こちらを参考にして作り直した方がいいと思いますよ。

エクセルで日付計算。日数・月数の計算方法まとめ(datedif関数不使用)
https://www.excelspeedup.com/hidukekeisan/

投稿日時 - 2018-07-06 08:39:40

ANo.3

確認させてください。
1.「AW23セルの日付」が本日の場合、そのセルに入力するのは何でそれは文字列ですか、それとも、数値ですか?
2.「~が意図する表示ができません」と仰っていますが、貴方が意図している表示を教えてください?
3.「~がうまくいきません」とのことですが、どうなれば「うまくい」ったことになるのですか?

投稿日時 - 2018-07-06 07:58:21

ANo.2

関数の意味はそのまま検索すればわかるんで、検索しましょう。

検索しづらい間違いがあったので、説明しておきます。
Excelで、"文字列"
このようにダブルクォートで挟まれたものは文字列として扱われます。

文字列はただ表示するためだけのもので、意味はありません。

ですので、関数をダブルクォートで挟んでしまうのはおかしいです。

質問に不足していることは、式に使われているセル全てに入力されている具体的な値や式。全て必要です。一つ一つ確認して補足しましょう。


他に調べづらいところで気がついたところ

>当月より-1の月の場合

MONTH(NOW())が今月だから、-1で先月とでも思ったのかもしれませんが、

今月の取りうる値は1~12
マイナス1なら0~11
0月なんてないですね。

投稿日時 - 2018-07-06 06:06:50

ANo.1

>セルAV23=IF(AW23="","",MID(AW23,5,2))
>このセルにAW23セルの日付より3か月後を「00」表示しています
AV23の値は数字2つの文字列になりますがそれで良いのですか?

>セルCX23=IF(AV23="MONTH(NOW())-1","1","")
>としましたが意図する表示ができません
CX23にはどのような値を求めていますか?
「"MONTH(NOW())-1"」は計算式ではなく文字列なので前述の数式で求めているAV23の2桁の数字(文字列)とは絶対に一致しませんのでCX23の値は常に""です。

質問の文言からあなたの考えていることが読み取れません。

投稿日時 - 2018-07-05 23:30:16