[[20220827161607]] 『Weekday関数 曜日がずれる件です』(ギンガム) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Weekday関数 曜日がずれる件です』(ギンガム)

エクセルで、2020年2月〜3月の
A列は月の変わり始めの日だけ月を表示させ、
B列はWeekday関数で曜日を表示させたいのですが、
曜日がずれるところがでてきます。

A3に2020/2/28と入力している状態で
A4のセルに以下の数式を入れています。(表示形式はd)
=IF(DAY(A3+1)=1,MONTH(A3)+1&"/"&DAY(A3+1),A3+1)

B3のセルには
=WEEKDAY(A3)です。(表示形式はaaa)

B3には「金」B4には「土」と正しく表示されますが
B5は「日」と表示してほしいところ「火」の表示になってしまいます。

A5の表示形式は3/1となっていてシリアル値の表示に変更することもできません。
B5のセルに正しい曜日を表示するにはどうすればよろしいでしょうか?

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 A4 =IF(DAY(A3+1)=1,TEXT(A3+1,"yyyy/m/d"),A3+1)
 以下、下方向へフィル。
 とかでどうですか。
 セルの表示形式はdのままで。

 条件付き書式の方が、セル内の数式がすっきりすると思いますけど。
(たこわさ) 2022/08/27(土) 16:40

 4行目から下のセルには以下の数式を入れる。

 A4セル =IF(ISTEXT(A3),A2+2,IF(DAY(A3+1)=1,MONTH(A3)+1&"/"&DAY(A3+1),A3+1))
 B4セル =WEEKDAY(IF(ISTEXT(A4),A3+1,A4))

 それぞれ下にフィルコピー

(半平太) 2022/08/27(土) 17:03


 >MONTH(A3)+1&"/"&DAY(A3+1)
 A3セルが 12/31 だったら、この式では「13/1」になりますよね。
 12〜1月というケースはないんですか?

 どっちにしても「条件付き書式」の方がいいと思います。

 1)A列
   A4セルに =A3+1 と入れ、表示形式〜ユーザー定義 d
   必要なだけ下コピー

   A4セルから下を選択し、条件付き書式〜新しいルール

   ルールの種類:数式を使用して、書式設定するセルを決定
       数式:=DAY(A4)=1

   書式〜表示形式〜ユーザー定義 m/d

 2)B列(曜日)
   B3 =TEXT(A3,"aaa;;")  表示形式「標準」
   下コピー

 以上
(笑) 2022/08/27(土) 18:49

2020/2/28と入力して普通に下へドラッグしないのはなぜ?
(・・・) 2022/08/27(土) 18:53

 >2020/2/28と入力して普通に下へドラッグしないのはなぜ?

 A3セルの日付を変更するたびにオートフィルしなくて済むようにでは?
(笑) 2022/08/27(土) 19:00

 ちょっとマズったので訂正します。

 >=WEEKDAY(A3)です。(表示形式はaaa)

 表示形式がaaaなら、Weekday()でラップする必要はないです。
 日付そのものを入れればいいので。それが本来の使い方です。

 Weekdayを使っても問題が生じないのは、たまたま1900/1/1が日曜だったためです。

 >MONTH(A3)+1&"/"
 A3が12月だとマズくないですか?(A4は、13/1となる)

 A4セル =IF(DAY(A3+1)=1,TEXT(A3+1,"m/d"),IF(ISTEXT(A3),A2+2,A3+1))
 B4セル =IF(ISTEXT(A4),A3+1,A4)

 下にコピー

(半平太) 2022/08/27(土) 19:06


なんであやふやな式にするんだろうか。
日付の式をドラッグするなら日付をドラックした方がいいんではないの。
(・・・) 2022/08/27(土) 20:00

同感。
今のA列の前に1列追加。
この新しいA列は非表示
A3: =基準日のセル
A4: =A3+1
A5: =A4+1
     :

B3: =IF(DAY(A3)=1,TEXT(A3,"m/d"),TEXT(A3,"d"))
B4: =IF(DAY(A4)=1,TEXT(A4,"m/d"),TEXT(A4,"d"))

     :

C3: =A3 (書式を aaa)
C4: =A4 (書式を aaa)

     :

(AddinBox_角田) 2022/08/27(土) 22:12


 変に難しく考えなくても条件付き書式で簡単にできます。

 やり方はすでに書いた通り

 以上
(笑) 2022/08/27(土) 22:49

皆様、いろいろと教えてくださいましてありがとうございました。
数式の使い方や考え方勉強になりました。

確かに先ほどの式ですと13月になってしまう問題がでてきますね。
条件付き書式を使うと簡単にできるのは助かります。
簡単にできました。ありがとうございます。

私のお知らせさせていただいた式をオートフィルした場合、
A4のシリアル値は43890,A6は44622,A7は44623〜となりました。
A5はシリアル値が表示できず3/1のままでした。3/1なのでWeekday関数では3という認識で
火曜の表示になってしまったのでしょうか。A5が43891とならなかったのはなぜでしょうか。

前の式の質問再び申し訳ありません。
よろしくお願いいたします。

(ギンガム) 2022/08/28(日) 01:34


 >3/1なのでWeekday関数では3という認識で
 自信はありませんが、
 =DATEVALUE("3/1")とすると「44621」つまり「2022/3/1」になります。
 どちらかといえば、こっちのような気がします。
 たまたまその日も火曜日ですね。

 >A5が43891とならなかったのはなぜでしょうか。
 こちらも自信はありませんが、
 数式のバーの左にある「fx」を押すと表示される「関数の引数」では、
 "3/1" が返っています。" "で括られているので文字列扱いですよね。
 =TYPE(A5)でも、文字列を表す2が返ります。
 先述のWeekday関数も、A5セル以降のA6,A7も、
 "3/1"という文字列を評価した際、
「2022/3/1」という日付であると判断したのではないでしょうか。
(たこわさ) 2022/08/28(日) 05:44

 すでに説明されていますが、少し補足しておきます。

 A5セルはシリアル値ではなく「3/1」という文字列ですよね。
 WEEKDAY 関数などはそのような文字列でもエラーにはなりません。

 ただし「年がない」文字列の日付は、現在の年(今なら2022年)とみなされます。
 セルに 8/28 と年を省いて入力しても「2022/8/28」の日付が入るのとその点は同じですね。

 3/1 = 2022/3/1 は火曜日なので =WEEKDAY(A5) は「3」を返します。

 これで A6セルのシリアル値が「44622」になる理由もわかりますよね?

 =A5+1 は「3/1」という文字列(つまり「2022/3/1」)に 1 を足しているので
 A6セルは「2022/3/2」(シリアル値「44622」)になるのです。

 以上
(笑) 2022/08/28(日) 09:43

 >A5が43891とならなかったのはなぜでしょうか。
 A5 はあくまで「3/1」という文字列ですから、セルの値そのものがシリアル値にはなりません。

 A5が =TEXT(A4+1,"yyyy/m/d") という式だとします。
 これも文字列なのでシリアル値ではありませんが、年も含めているので(この場合は2020年)
 WEEKDAY は「1」を返します。

 その状態で A6セルが =A5+1 なら、A6は「2020/3/2」(シリアル値「43892」)になります。

 以上、補足の補足
(笑) 2022/08/28(日) 10:17

なるほど。そういうことなのですね。
お忙しいところ、何度も質問して申し訳ありませんでした。
詳しく解説していただき、ありがとうございました。

(ギンガム) 2022/08/29(月) 00:03


A1 2/28
A2 =A1+1

B1 =A2 下へフィールコピー・・・・書式設定 aaa

ではいかがでしょうか
 

(あらし) 2022/08/30(火) 11:30


 >B1 =A2 下へフィールコピー

 日付と曜日がずれません?

(コナミ) 2022/08/30(火) 12:42


A1 2/28
A2 =A1+1

B2
=A2       
・・・・書式設定 aaa 

B3 
=B2+1      
下へフィールコピー・・・・書式設定 aaa    

(あらし) 2022/08/30(火) 17:14


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.