初めまして。
初投稿のため、ご迷惑おかけしてしまったら申し訳ございません。自分で調べてもヒットしないのでこちらで質問させていただきます。
表示形式をdにして、月またぎを表示しない方法を探しておりました。6月なら31、2月なら29以降など、カレンダーにはないはずの月末、末日のことです。day関数単体や手入力だと31まで表示されますが、下記の式の通り表示しない方法がわかりました。
=IF(DAY(A1+1)=1,"",A1+1)
ですが、理由がわかりません。こちらの式で2022年9月31日を非表示できる理由を分かりやすく教えていただけますか?
前提条件として
①a1に2022/9/1と手入力
②表示形式を全てdに変更
③a2に=IF(DAY(A1+1)=1,"",A1+1)と入力
④③をオートフィルでa31までコピー
結果、a31は9/31とならずに空欄になる(当然①が2022/8/1だと表示される)
=1が関与しているのだと思いますが、なぜそれだけでこうなるのか意味がわからなくて。IFの意味はわかります。理由もわからないまま使うのはその場しのぎなので勉強のためにも質問させていただきました。パソコンやエクセルは初心者ではないものの、プログラミングは未知のレベルです。
ご回答のほどよろしくお願いいたします。
※参考先
検索ワード 28日~31日が必要ない所を空白表示にする方法
リンク先 https://oshiete.goo.ne.jp/qa/8372477.html
No.5ベストアンサー
- 回答日時:
前提条件に書かれているようにやってみましたが、
下図のようになりました。
> こちらの式で2022年9月31日を非表示できる理由
=IF(DAY(A1+1)=1,"",A1+1)
この式がA2に書かれているのだと、
(A1の日付に1を加えた日付)の《日の数値》が1である場合には、
""(空白)を A2に表示します。
(A1の日付に1を加えた日付)の《日の数値》が1でない場合には、
(A1の日付に1を加えた日付)を A2に表示します。
ですが、このとき、表示形式をdにしているので、
画面上には、日付ではなく、
一見すると、《日の数値》が表示されているように見えます。
このA2式のセルを下にオートフィルすると、セルの式の中のセル指定がカウントされていきます。
A31の式は、=IF(DAY(A30+1)=1,"",A30+1) となります。
A30は、一見すると 30 ですから、数値の30のように見えていますが、Excelは、このA30は、2022/9/30 のことであると扱っています。
A31の式で、 (A30+1) ⇒ 2022/10/1 ですが、
DAY(A30+1) ⇒ 1 です。
DAY(A30+1)=1 なので、IFの条件に該当するので、
""を、A31に表示します。
A32の式は、=IF(DAY(A31+1)=1,"",A31+1) です。
A31+1 ⇒ ""+1 なので計算できないので、エラーになります。
画面上には、日付ではなく、一見すると、《日の数値》が表示されているように見えます。
→これが一番の原因だったと思います。dayで出した答えとも勘違いしやすく。
とても分かりやすくて助かりました。
2022/9/30だから2022/9/31は存在しないし、10/1は1だから空白と。
No.4
- 回答日時:
=IF(DAY(A1+1)=1,"",A1+1)
質問にある式のままだと非表示になるとは限りません。
このままだと、2月の場合にエラーが表示されるからです。
A29セルなら問題ないのですが、A30セルとA31セルが#VALUE!の
エラーとなるだけで非表示にはなりません。
質問のリンク先のように
=IF(A1="","",IF(DAY(A1+1)=1,"",A1+1))
とするか、エラーに対応するIFERROR関数を使って
=IFERROR(IF(DAY(A1+1)=1,"",A1+1),"")
のようにする必要があります
上記を前提にして、空白になる理由を説明しますね。
質問文にある前提条件にも理解を妨げるものがあります。
②の表示形式をdに変更をすると、表示形式としての整数部分の
1~31までと、日付としてのシリアル値を勘違いしやすいからです。
https://support.microsoft.com/ja-jp/office/day-% …
A2以降は、式によって、すぐ上のセルのシリアル値に+1をして、
A1+1の部分で次の日付の年月日が求められます。
DAY関数の部分では求めた年月日から日を整数として取り出し、
1~31までを出します。このDAY関数によって求められた整数と、
IF関数の条件部分にある=1を比べて等しい場合には空白とする
ものですから、次月の1日となった場合に空白となります。
2月の場合には、A30セル以降では空白セルを参照して+1をする
ので#VALUE!のエラーとなります。そこで、エラーに対する処理が
必要となるのです。
今回の質問では、すぐ上のセルを参照して+1としてシリアル値と、
DAY関数で求められた整数の値と、私が説明をしたエラー処理の
設定によって非表示とすることができることを理解してください。
ちなみに、
> 30日と31日のセルは空白…すなわち「0」…に「1」が足されるので
> 「1900年1月1日」になり、空白表示されることになります。
は、説明としては間違っていることも理解できるかと思います。
添付画像では、2月の場合においてA列は年月日表示にしてあります。
B列は同じ年月日を質問にある式のみで処理した場合で、C列には私が
説明したエラー処理を施して非表示にしたものです。
途中の行を非表示にしているだけなので、連続したものです。
元の式がなぜこうなのかがわからないまま勝手に消して使いやすくしてしまいました…。その理由がとても分かりやすくて勉強になりました。
ありがとうございました。
No.2
- 回答日時:
まず、Excelにおいて、日付や時間は「シリアル値」という数値で管理されています。
この「シリアル値」は、
「1900年1月1日 0:00:00」が「1」
「1900年1月2日 0:00:00」が「2」
「1900年1月3日 0:00:00」が「3」
のように1日で1ずつ数値が増えます。
そして12時間で「0.5」、6時間で「0.25」のように、24時間で「1」になるように小数点以下の数字が「時間」として付随します。
すなわち
「2022年8月20日 0:00:00」に分数の ”1/24” を足すと
「2022年8月20日 1:00:00」になり、分数の ”2/24” を足すと
「2022年8月20日 2:00:00」になるという事です。
ちなみに
「2022年8月20日 0:00:00」は「44793」、
「2022年8月20日 2:00:00」は「44793.08333」のシリアル値になります。
そんなわけでシリアル値に「1」を足すと翌日の日付になるのです。
これを理解していないと「月末の日付」に「1を足す」と「翌月の1日」になることが分からないでしょう。
・・・
要は、1を足して翌月の1日になったら表示させない(空白を代わりに表示)としているだけです。
では、閏年でない2/28の翌日は3/1、閏年なら2/29になるので、1日は表示されず2/29は表示される。
余っている30日と31日のセルは空白…すなわち「0」…に「1」が足されるので、
「1900年1月1日」になり、空白表示されることになります。
独学で行うと習うよりも大事なことが抜けがちなので、とても勉強になりました。物事の核の部分から教えてくださる説明をする方とても有難いです。ありがとうございました。
No.1
- 回答日時:
dayは日付をとる関数で、ifは条件分岐です。
まずifは
day+1日が1日なら 「DAY(A1+1)=1」
空欄になり、「""」
1日以外なら日付に+1日して表示する「A1+1」
ということになります。
そのまましたに伸ばしていくと、9/31の次は10/1になりますので、
ifに当てはめると9/31+1日は10月1日、つまりdayは1になりますよね?
なので空欄になるわけです。
伝わるでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/10/25 17:10
- Excel(エクセル) エクセルについて教えてください。 1 2022/12/26 09:01
- Excel(エクセル) 現時点の年齢を算出して、その年齢と一致したセルを色付けしたい。 4 2022/06/23 17:49
- Excel(エクセル) Excel セルに入っている日付を参照して、別シートのリストを表示させたい 1 2022/04/12 17:02
- Excel(エクセル) エクセルの数式について教えて下さい。 8 2023/05/27 12:17
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) 関数を用いて表示したセルの内容を、見えている形でコピーする方法 2 2022/09/14 16:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでユーザーフォームの表示を...
-
Googleカレンダーで予定を入れると
-
PPTのスライド表示の画面の位置...
-
スマホの小文字gについて
-
WEBデザインわかる方!ソース表...
-
Formの表示状態の取得
-
ステータスバーって??
-
最新のiTunesでサイズ(容量)...
-
マイソフトバンクアプリでbad U...
-
【サンダーバード】画面左にア...
-
エクセル関数について、分かる...
-
7セグメント LED ディスプレイ ...
-
VC++でコントロールの境界線を...
-
製品への製造国表示義務について
-
エクセルの散布図でラベルの位...
-
パワーポイント ネット上のク...
-
Googleマップの混み具合が表示...
-
電卓 カンマを表示させたい
-
LCDに小数点以下の数字を表示す...
-
ウィルコム『9(nine)』でmixi...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PPTのスライド表示の画面の位置...
-
VBAでユーザーフォームの表示を...
-
歩数の下に▲609 ▼27と表示され...
-
PC版では「何時間前」というよ...
-
スマホの小文字gについて
-
Googleカレンダーで予定を入れると
-
Formの表示状態の取得
-
7セグメント LED ディスプレイ ...
-
WEBデザインわかる方!ソース表...
-
bloggerのレイアウト→ページリ...
-
製品への製造国表示義務について
-
ガソリンスタンド の料金表示で...
-
VC++でコントロールの境界線を...
-
Googleマップの混み具合が表示...
-
outlookの予定表・週表示での曜...
-
最新のiTunesでサイズ(容量)...
-
ステータスバーって??
-
真空管 6550のメーカー
-
電卓 カンマを表示させたい
-
下記エクセルの式がなぜこうな...
おすすめ情報
回答まとめです。自分で忘れないようにしたくて。
・式は=IF(A1="","",IF(DAY(A1+1)=1,"",A1+1))を使うこと。※2月のa31など、上のセルが空白でエラーになるため。
・前提として、エクセルでは各年月日に一つずつ対応された数字=シリアル値が存在する。シリアル値で全て計算しているので、表示形式の標準となる。
・シリアル値は1900年1月1日 0:00:00を1として1日で1ずつ増える。(厳密には1時間ごとに1/24増えるので12時間なら0.5。だから1で翌日となる。)
・dayとはシリアル値から1~31までの整数で返す関数のこと。
・44774が基準で表示形式を変えれば2022/8/1になるという認識で行う。
今回はa1~a31に今月の日にちだけを表示したいので
①表示形式を全てdに。(日にちだけ表示)
②a1に2022/8/1と入力。(日付の1だけは変えない。)
③a2に=IF(A1="","",IF(DAY(A1+1)=1,"",A1+1))と入力
④a2をオートフィルでa31までコピーする
式の意味は、上のセルが空白または1なら表示しない、1でなければ上のセルに1を足したものを表示する。
詳しくは【=IF(A1="","",】がa1が空白なら表示しない。(相対参照なので上のセル)
【"",IF(DAY(A1+1)=1,"",】は、例えばa1はシリアル値だと44774であり、2022/8/1でもあるので、DAY関数により1だけ抽出されるので答えは2=1となり、1ではないので下記を表示する
【A1+1))】は上記と同じで44774であり、1を足すと44775となり、2022/8/2となる。
まとめ なぜ9/31を非表示にできるのか?
・エクセルでは年月日に必ずシリアル値があるので2022/9/31が実在しないと判断できる。
・DAYはシリアル値から整数を抽出するだけで、それが1であれば空白というIFを使っていること。それにより翌月1日を非表示にできる。2月を除けば30か31しかないので1日となる。
・2月は29か30が空白だから、上のセルが空白ならばのIF条件で対応できるのでこの式を使う。
・表示形式dにより数字に見えるのでDAYの整数と勘違いしたが、正しくはa30+1だから44835と入力されていて2022/10/1のこと。IFにより、日にちが1なので表示されない。
・つまりDAYとシリアル値、表示形式で2022/8/1,44774,1などもわからないままだったので、DAY()とa1+1で混乱してしまったのが原因。
・表示形式を標準とdで比較するととても分かりやすい。