エクセルとの付き合いは〇十年のパート事務員が僭越ながら開催しています、エクセル塾です。
前回は、日付時刻の関数①、でした。
【Excel/初心者】エクセル塾:日付時刻の関数①
今回は「曜日を表示するには」をやろうと思います。
1.曜日を表示するには
日付データから曜日を表示する方法
- 日付の書式を曜日にする => aaa , aaaa , ddd , dddd , yyyy/m/d(aaa) 等
- TEXT関数を利用する => TEXT(日付,”aaa”)
- WEEKDAY関数を利用する => WEEKDAY(日付,種類)
(1)日付の書式を曜日にする
日付データの書式を変更するだけで曜日は表示できます。
書式を設定したいセルを指定して、書式設定「その他」で「aaa」と指定すると「月、火」等の表示となります。主な書式設定を以下に示します。
書式設定 | 表示の例 |
---|---|
aaa | 月 |
aaaa | 月曜日 |
(aaa) | (月) |
(aaaa) | (月曜日) |
ddd | Mon |
dddd | Monday |
yyyy/m/d(aaa) | 2022/7/4(月) |
セルの書式を設定して曜日(今回は「月」等)の表示にしてみたいと思います。
A列に日付値(書式はyyyy/m/d)、B列には=A列のセルとしてA列のセルと同じ値が入っています。
B列に書式設定をします。B列の書式を設定したい範囲を選択してCtrl+1キーで「セルの書式設定」ボックスが表示されます。(右クリックから「セルの書式設定」をクリックしてもOK)
「表示形式」タブで「ユーザー定義」をクリックして指定。
種類のボックスに「aaa」と入力します。
もう一つやってみましょう。
今度はA列の日付の書式を変更して、日付と一緒に曜日も表示したいと思います。
A列に書式設定をします。A列の書式を設定したい範囲を選択して、Ctrl+1キーで「セルの書式設定」ボックスを表示します。(右クリックから「セルの書式設定」をクリックしてもOK)
「表示形式」タブで「ユーザー定義」をクリックして指定。
種類のボックスに「yyyy/m/d(aaa)」と入力します。
(2)TEXT関数を利用する
TEXT関数は指定した値を、指定した書式の文字列に変換して表示する関数です。
日付の入力されてセルを指定して、曜日形式にして表示するには
=TEXT(日付のセル, “aaa”)
と入力します。
日付の入力されたセルを指定して、曜日にして表示してみましょう。
A列には日付が入力されています。(シリアル値、書式設定yyyy/m/d)
曜日を表示したいB列にTEXT関数を入力します。
セルB2に
=TEXT(A2,”aaa”)
と入力し、B列の下の行にも関数をコピーします。
日付のシリアル値から変換されて、「月」とか「木」とかいう文字列に代わります。
後述しますが、曜日でフィルタをかけたいときにはこの方法が一番良いです。
(3)WEEKDAY関数を利用する
WEEKDAY関数は、引数に指定した日付に対応する曜日を数値で返す関数です。
=WEEKDAY(日付, [種類] )
と、指定します。
- 引数の「日付」はシリアル値を指定すること
- 引数の「種類」は省略可能。省略すると種類1が適用され、日曜=1~土曜=7の数値が返ります
- 戻ってくるのは数値なので、曜日として表示したい場合は書式設定で曜日の書式とする。
ただし「種類」は省略か「1」を指定していないとおかしなことになる - 戻ってくるのは数値なので、計算に使用するときなんかに便利
引数の日付はシリアル値を指定する
=WEEKDAY(2022/7/1,1) とやってもだめです。おかしな答えが返ってきます。
日付の部分にはシリアル値を指定します。
日付を入力したセルを参照するのが簡単です。
=WEEKDAY(日付のセル,[種類])
とします。
どうしても直接関数内に日付を指定したいときはDATE関数、DATEVALUE関数を併用したりするとよいです。
(以下は必要ない方は読み飛ばしてください。また、以下の例示では「種類」は省略しています))
直接日付を指定する方法:
たとえば2022/7/1の曜日を取得したかったとします。2022/7/1は金曜日です。
=WEEKDAY(2022/7/1)
とすると曜日は日曜日になってしまいました。
2022÷7÷1の答え288.857…の曜日を返してきているようです。
かといって、
=WEEKDAY(2022年7月1日)とすると、エラーになります。
日付データつまりシリアル値、2022/7/1であればシリアル値は44743ですが、それを求めて入力するのも面倒です。なので、DATE関数やDATEVALUE関数を使用して2022/7/1のシリアル値を求めるのが簡単です。
DATE関数の場合は、引数に=DATE(年,月,日)を入力します。
=DATE(2022,7,1)
DATEVALUE関数の場合は引数に文字列で日付を入力します。
=DATEVALUE(“2022/7/1”)
とするとシリアル値44743が取得できます。
それをWEEKDAY関数の引数に入れ子で入れます。
=WEEKDAY(DATE(2022,7,1))
=WEEKDAY(DATEVALUE(“2022/7/1”))
引数の「種類」
もう一つの引数の「種類」は戻り値の曜日の数字を何にするか、を指定するものです。
省略することも可能です。省略すると、下記の1を指定したことになります。
種類 | 戻り値 |
---|---|
1(省略した場合もこれ) | 日=1、月=2、火=3、水=4、木=5、金=6、土=7 |
2 | 月=1、火=2、水=3、木=4、金=5、土=6、日=7 |
3 | 月=0、火=1、水=2、木=3、金=4、土=5、日=6 |
引数はほかにもあるようですが、ここでは割愛します。
後述の書式を曜日にする場合、種類を1(または種類は省略)しないとおかしな結果になります。
曜日の書式にするとわかりやすい
戻り値は数値ですので、え~っと7だから土曜日か・・・等と頭を使うよりも、書式を曜日形式にするとわかりやすいです。
ただし、Weekday関数の種類を「1」または省略にしておかないと、おかしな結果になったりします。
私は今まで勘違いして、WEEKDAY関数で日付を数値に変換してから、書式を曜日にしていたのですが、書式を曜日にするということは、そもそも日付のシリアル値から計算して対応する曜日を表示する、というものらしいです。
WEEKDAY関数の種類を「1」とした場合(または省略した場合)、日曜日は戻り値1になります。
たまたま、1900/1/1(シリアル値では「1」)が日曜日だから、WEEKDAY関数の戻り値「1」を「日曜日です」としてくれているみたいです。
正確には1900/1/1は月曜日だそうですが、エクセルのバグか何かで「日曜日です」ということになっているらしい。結構こじれている。。。
こじれ具合についてはこちらの記載を参照させていただきました
https://stabucky.com/sb/1092
どうやら曜日を表示したいだけならTEXT関数か、日付の書式を変更するか、が正道のように思います。
2.曜日でフィルタをかけたいときはTEXT関数が便利
月曜日をフィルタで絞り込みしたいなあ、というとき。
TEXT関数で日付の曜日を表示したものが、フィルタが最もやりやすいです。
=TEXT(日付のセル,”aaa”)
と指定します。
フィルタ候補にはちゃんと「月、火、水、木、金、土、日」と見たまんまが表示されます。これぞ求めていた形!
なお、日付の書式を曜日にしただけだと、曜日で絞り込みができません。
WEEKDAY関数で曜日を数値にしておくと、日付の時よりはフィルタがかけやすいのです。
ただ、フィルタの選択肢としては見た目通りに曜日で出てくるわけではなく数値(日付)が表示されるので、「種類を1にしたから、日曜が1だから、月曜日は2だな」とちょっと考えなければいけません。
やはり、TEXT関数で日付の書式に数値を指定すると、フィルタが最もやりやすいですね。
3.WEEKDAY関数の使いどころ
じゃあ、WEEKDAY関数ってあんま使えなくね?と思っちゃったりしますが、使いどころはあります。曜日を数値で扱いたいときには便利です。計算式に使用するときや、条件として利用するときなどに。
(1)条件付き書式で利用する
エクセルのカレンダーで、条件付き書式で、〇曜日だけ書式を変えたいな、というときなどにWEEKDAY関数が便利です。
例でやってみましょう。
B列に日付があります。書式はyyyy/m/d(aaa)にしてあります。
C列にWEEKDAY関数、日付はB列の日付、種類は「1」を指定(日曜日が1)。
D列にWEEKDAY関数、日付はB列の日付、種類は「2」を指定(月曜日が1)。C列の
条件付き書式で文字色を土曜日を青、日曜日を赤にする
C列のWEEKDAY関数を使ってみましょう。種類が1、つまり日曜日が1、土曜日が7です。
①条件付き書式を設定したいセル範囲を選択
②リボン「ホーム」の「条件付き書式」から「新しいルール」をクリック。
③「数式を使用して、書式設定するセルを決定」を指定
④条件にC2=1(C列が1つまり日曜日)を入力、書式はフォント赤を指定
⑤「OK」ボタンクリック。
次に、条件付き書式を設定したセルを選択した状態で、リボン「ホーム」の「条件付き書式」から「ルールの追加」をクリック。
同様の手順で「数式を使用して、書式設定するセルを決定」を指定し、条件にC2=7(C列が7つまり土曜日)を入力、書式はフォント青を指定し「OK」ボタンをクリック。
条件付き書式で土日をグレーの塗りつぶしにする
今度は土日をグレーの塗りつぶしにしてみましょう。
C列の土曜=7、日曜=1を利用してもよいのですが、D列でWEEKDAY関数の「種類」を「2」にしているほうが、土曜=6、日曜=7なので、「条件 6以上」でまとめて設定できて便利そうです。D列でやってみましょう。
①条件付き書式を設定したいセル範囲を選択
②リボン「ホーム」の「条件付き書式」から「新しいルール」をクリック。
③「数式を使用して、書式設定するセルを決定」を指定
④条件にD2>=6(D列が6以上、つまり6と7が該当、つまり土日)を入力、書式は塗りつぶしグレーを指定
⑤「OK」ボタンクリック。
(2)数式でWEEKDAY関数の戻り値を利用する
IF式などで〇曜日の場合はなになに、とかしたいときに、WEEKDAY関数で曜日を数値にしておくと扱いやすいです。
以下の例でやってみましょう。
カレンダーがあり、WEEKDAY関数でB列の日付に対応する曜日をC列に数値で出力しておきます。
発注個数の基準が100で、金曜日は基準個数×1.1の個数、土日は基準個数×1.5の個数としたいとします。発注個数の基準100個はセルD1に入力してあります。
C列に曜日をWEEKDAY関数で表示します。土日をまとめて扱いたいので「種類」は月曜1の「2」にします。
セルC4に以下の式を入力して、カレンダーの最後の行までコピーします。
=WEEKDAY(B4,2)
D列にIF式を入力していきます。
C列の値を参照し、
・金曜(つまり5)の場合は基準個数×1.1
・土日の場合(つまり6か7)は基準個数×1.5
・それ以外は基準個数
とします。
セルD4には以下のように入力し、カレンダーの最後の行までコピーします。
=IF(C4=5,$D$1*1.1,IF(C4>=6,$D$1*1.5,$D$1))
基準個数の入力されているセルD1を絶対参照にするのを忘れずに!
と、まあ、こんな感じでWEEKDAY関数にはWEEKDAY関数ならではの使いどころがあるわけですね。長くなってしまいました。お読みいただきありがとうございました。
次回は文字列の日付をシリアル値の日付データにするには、をやりたいと思います。
日付時刻の関数シリーズ
【Excel/初心者】エクセル塾:日付時刻の関数①
【Excel/初心者】エクセル塾:日付時刻の関数③文字列・数値を日付データ(シリアル値)にするには
【Excel/初心者】エクセル塾:日付時刻の関数④時刻の関数
コメント