ラベル date関数 の投稿を表示しています。 すべての投稿を表示
ラベル date関数 の投稿を表示しています。 すべての投稿を表示

9/23/2025

Excel。条件付き書式で日付をつかった条件が、なぜか反映されません【DATE】

Excel。条件付き書式で日付をつかった条件が、なぜか反映されません

<条件付き書式+DATE関数>

販売金額を管理している表があります。

 


販売日が2025/9/10以降のデータとわかりやすいように、行全体を塗りつぶしたいと考えました。


2025/9/10以降という条件と、塗りつぶしをしたいということから「条件付き書式」をつかいます。


あとは、2025/9/10以降という条件式をつくればいいわけです。


A2:B13を範囲選択して、ホームタブの条件付き書式にある「新しいルール」をクリックします。


新しい書式ルールダイアログボックスが表示されます。


「数式を使用して、書式設定するセルを決定」を選択して、条件式を設定します。

=$A2>=2025/9/10


A2を$A2とすることで、行全体を塗りつぶし対象とすることができます。


書式ボタンをクリックして、塗りつぶしたい色を設定したら、OKボタンをクリックしてみます。


すべての行が塗りつぶされてしまいました。

なんでこうなってしまったんでしょうか。


原因を探る必要があります。D列に

=A2>=2025/9/1

という条件式を設定してオートフィルで数式をコピーしてみると、すべてTRUEと判定されています。


TRUEなので、条件を満たしているといっています。


では、数式の検証をつかって、さらに原因を探ってみましょう。


D2をクリックして、数式タブにある、数式の検証をクリックします。


数式の計算ダイアログボックスが表示されます。


検証ボタンを何度かクリックします。


すると、A2が45901というシリアル値で表示されています。

問題なのは、2025/9/1。


なんとシリアル値になるのではなく「/」があるので、除算しています。


こちら希望としては、日付であってほしかったのですが、単純に数値扱いになっていることがわかりました。


45901>=225を比べたら当然、すべてがTRUEになってしまうので、データすべてが塗りつぶされてしまったというわけです。


D2の数式を次のように修正してみました。

=A2>="2025/9/1"


と日付の前後に「”(ダブルコーテーション)」で囲んだところ、今度はすべてFALSEになってしまいました。


「”(ダブルコーテーション)」で囲むと、文字になってしまいます。


数値と文字を比べれば、文字のほうが大きいので、FALSEと表示されるのも納得がいきますが、これもダメということです。


ExcelにはAccessのような「#」で囲むと日付になるというものがありません。

そのため、日付であると認識させるには、DATE関数を使う必要があります。


D2の数式をDATE関数で修正します。

 


=A2>=DATE(2025,9,10)

オートフィルで数式をコピーすると、10日以降がTRUEになったことが確認できました。


あとは、条件付き書式を改めて、設定しなおしましょう。


条件式は、

=$A2>=DATE(2025,9,10)

書式も設定したら確認してみましょう。

条件付き書式で日付をつかった条件が、なぜか反映されません

このように、2025/9/10以降のデータ全体を塗りつぶすことができました。


日付を直接条件として使う場合には、日付とExcelがわかるようにしてあげる必要があります。

5/14/2025

Excel。月別の第2火曜日の日付一覧を手早くつくりたい【Second Tuesday】

Excel。月別の第2火曜日の日付一覧を手早くつくりたい

<WORKDAY.INTL+DATE関数>

毎月第2火曜日に営業会議を開催することにしています。


月別の第2火曜日の一覧表をつくり管理することにしましたが、イチイチ、カレンダーを見て、第2火曜日を確認するのは、とても面倒です。


何かいい方法はないのでしょうか。


このような場合には、WORKDAY.INTL関数を使うことで、手早く月別の第2火曜日を求めることができます。


次の表を用意しました。


A列には、年。

B列には、月が入力されています。


C2に、WORKDAY.INTL関数の数式をつくります。


C2には、

=WORKDAY.INTL(DATE(A2,B2,0),2,"1011111")

と設定します。


結果はシリアル値で表示されますので、表示形式をつかって、日付にして、オートフィルで数式をコピーします。


これで、月別の第2火曜日の日付を求めることができました。


では、数式を確認しておきましょう。

=WORKDAY.INTL(DATE(A2,B2,0),2,"1011111")

最初の引数は、日付です。


DATE関数をつかって前月末日をもとめます。


DATE関数の日を0にすることで、前月末日の日付をつくります。


2つ目の引数は、日数。

営業日数ですが、これは、第2火曜日なので、「2」とします。


3つ目の引数は、週末です。ここに、"1011111" と設定します。


これは、月曜日から日曜日までを表しています。


そして、0は営業をしていて、1は休業というルールです。

火曜日を0として、他を1とすることで、火曜日のみが営業していることができます。


そして、前月末日から2とすれば、2回目の火曜日。


すなわち、第2火曜日を求めることができるという仕組みです。

8/20/2024

Excel。年月日が分かれいるセルから日付をつくるには、どうしたらいいの【date】

Excel。年月日が分かれいるセルから日付をつくるには、どうしたらいいの

<DATE+LEFT+LEN関数>

年月日がそれぞれのセルに入力されているのですが、次の表のように、数値の後ろに「年」や「月」「日」まで入力されてしまっています。

年月日が分かれいるセルから日付

D2に、DATE関数をつかって、日付をつくってみようとしますが、#VALUE!というエラーが表示されてしまいました。


D2には、

=DATE(A2,B2,C2)

という数式を設定しましたが、DATE関数の引数は、文字ではなく、数値でないといけないので、エラーが発生したというわけです。


では、どのようにしたら、よいのでしょうか。


ホームタブの置換をつかって、「年」「月」「日」を空白にしてもいいのですが、データが追加される場合には、そのたびに、置換作業が発生します。


そこで、DATE関数で日付をつくることができないのか、考えみることにします。


そもそも、「年」「月」「日」を除くことができたら、空白にすることができたら、いいわけです。


置換する関数である、SUBSTITUTE関数をつかってもいいのですが、あまり馴染みのない関数なので、今回は、もう少し身近なLEFT関数とLEN関数をつかって、日付を作っていきます。


D2の数式は、

=DATE(LEFT(A2,4),LEFT(B2,LEN(B2)-1),LEFT(C2,LEN(C2)-1))


これで、日付を求めることができました。


関数もわかりやすい、シンプルなLEFT関数とLEN関数だけで構成してあります。


LEFT関数は、左から指定した文字数を抽出する関数です。

LEN関数は、指定した文字が、何文字なのかを算出する関数です。


では、数式の説明をします。


DATE関数は、日付を作る関数です。

引数は、年と月と日 です。


最初の年ですが、2024年なので、左から4文字にすれば、年を除いた数値だけを抽出することができます。


2つ目の引数の月ですが、3月や10月というように、数値の部分が1桁、あるいは、2桁の場合があります。

そのため、単純に左から1文字と固定することができません。


そこで、LEN関数をつかって、セル内の文字数を算出します。

そして、その算出結果から「月」の1文字分を減らした数が、数値の部分になりますので、

LEFT(B2,LEN(B2)-1)


と設定することで、数値の部分を抽出することができます。


3つ目の引数の日ですが、これも、月と同じなので、

LEFT(C2,LEN(C2)-1)

とすることで、「日」を除いた数値をつくることができます。


これらの結果をDATE関数をつかうことで、日付をつくることができます。

5/16/2024

Excel。関数をつかって手早く、月末一覧表をつくりたい。【end of month】

Excel。関数をつかって手早く、月末一覧表をつくりたい。

<EOMONTH+DATE関数>

オートフィルでその年の月末一覧を作成してもいいのですが、年が変わるたびに、イチイチ、オートフィルで月末一覧をつくるのも、面倒な作業だといえます。


そこで、関数をつかって、月末一覧をつくることにしました。

EOMONTH+DATE関数

B4に2024年の1月末日を算出するようにしたいわけです。


月末日を算出する関数は、EOMONTH関数です。


それでは、B4をクリックして、次の数式をつくります。

=EOMONTH(DATE($A$1,A4,1),0)


ところが算出結果が、日付ではなく、数値。シリアル値で算出されます。


表示形式をつかって日付に変えてます。

色々な方法がありますが、ホームタブにある、数値の書式ボックス内の「短い日付形式」をクリックします。


B4のシリアル値が、日付に変わったら、あとはオートフィルで数式をコピーします。


このように、年末日の一覧をつくることができました。

A1の値を2024から2025に変えれば、2025年の月末日一覧に変わります。


さて、B4に設定した数式を確認しておきましょう。

=EOMONTH(DATE($A$1,A4,1),0)


最初のEOMONTH関数は、最初の引数の開始日の何ヵ月前後の月末日を算出できる関数です。


最初の引数の開始日には、DATE関数で日付をつくっていきます。


2つ目の引数には、0と設定します。

0とすることで、開始日の月末日という意味になります。


あとは、最初の引数のDATE関数を設定します。

オートフィルで数式をコピーしますので、A1を絶対参照にしましょう。

3/19/2024

Excel。何か月後の何日はEDATE関数でつくれないので、どうしたらいいの【how many months later】

Excel。何か月後の何日はEDATE関数でつくれないので、どうしたらいいの

<DATE+YEAR+MONTH関数>

EDATE関数をつかうことで、日付から何か月後の同日をつくることはできます。


ところが、日付から何か月後の何日という日付をEDATE関数ではつくることができません。


どのようにしたらいいのでしょうか。

何か月後の何日

EDATE関数で出来ないならば、シンプルに、日付を作ることを考えるといいわけです。


A2に2024/6/3と入力してあります。


C2に3か月後の15日の日付を作る場合は、次のように数式を設定すればいいわけです。


=DATE(YEAR(A2),MONTH(A2)+3,15)


とてもシンプルな関数で対応できます。


DATE関数は、日付を作る関数

YEAR関数は、日付から年を抽出する関数

MONTH関数は、日付から月を抽出する関数

このMONTH関数で抽出された数値に「+3」すれば、3か月後の月を算出できます。

日付には、直接「15」と設定します。


これで、3か月後の15日を作ることができました。


どうしても何か月後ということから、EDATE関数と考えがちですが、単純に当月に「+3」をして、日付には「15」と入力すればいいわけです。

3/11/2024

Excel。同じ数だけの連続した日付をつくるには、オートフィルだけではダメなんです【consecutive dates】

Excel。同じ数だけの連続した日付をつくるには、オートフィルだけではダメなんです

<DATE+INT+ROW関数>

連続した日付を入力するには、オートフィルをつかうことで、手早く設定することができます。


ところが、次のような複数の同じ数だけの連続した日付を入力したい場合、オートフィルだけでは、対応することができません。


次の表のように、2日ごと3日ごとに同じ数だけの連続した日付を入力しています。

DATE+INT+ROW関数

このような場合、数式をつかって対応します。


A2には、

=DATE(2024,5,INT(ROW(A2)/2))

という数式を設定します。


あとは、オートフィルで数式をコピーするだけで、日付を入力することができます。


数式を確認します。


DATE関数は、日付を作る関数です。


年と月は、今回直接入力しました。

日がポイントです。要するに、1をどのようにつくるのか、そして、2個1を用意することができるのかという点です。


そこで、INT+ROW関数で対応するというわけです。


INT関数は整数にする関数。

ROW関数は行番号を算出する関数です。


ROW(A2)なので、2。

それを2で除算するわけです。


結果は、2÷2なので、1ですね。

A3ならば、3÷2なので、1.5ですが、INT関数で整数化されるので、1ですね。


また、C2に設定した数式は、

=DATE(2024,5,INT(ROW(C3)/3))


設定したい日になるようにすれば、3日ごとでも4日ごとでもつくれます。

10/26/2023

Excel。条件付き書式の条件式に直接日付を使うときはDATE関数をつかいます【format】

Excel。条件付き書式の条件式に直接日付を使うときはDATE関数をつかいます

<条件付き書式+DATE関数>

条件付き書式をつかうと、資料がわかりやすくなるメリットがあります。


例えば、次の表で、2024/1/6日以降のデータをわかりやすくしたいので、対象のデータ全体(行単位)で塗りつぶしたいとします。


では、実際に設定をしていきます。


A2:B9を範囲選択します。


ホームタブの条件付き書式にある、「新しいルール」をクリックします。


行単位で塗りつぶしたいので、新しいルールで数式を設定する必要があります。


新しい書式ルールダイアログボックスが表示されます。

「数式を使用して、書式設定するセルを決定」を選択します。


ルールに数式を設定します。


=$A2>=2024/1/6

あとは、書式を設定します。


OKボタンをクリックしてみましょう。

ところが、この数式だと、うまくいきません。


全部、塗りつぶされてしまいました。


「2024/1/6」だと日付として認識してくれません。


Accessならば「#」で囲みたいところですが、Excelでは「#」で囲むことはできません。


そのため、DATE関数をつかう必要があります。


では、数式を次のように修正します。


=$A2>=DATE(2024,1,6)


これで、完成ですね。


直接、日付を条件式で使うときには、DATE関数が必要になります。


なお、他のセルに、日付を用意してある場合は、セル番地を参照させますので、DATE関数は使わなくても大丈夫です。

8/18/2023

Excel。カレンダーの末日問題はSEQUENCE関数の登場で、劇的に変わりました。【last day】

Excel。カレンダーの末日問題はSEQUENCE関数の登場で、劇的に変わりました。

<SEQUENCE+DATE関数>

カレンダーを作るときに、いつもネックになるのが、末日問題。


例えば、3月なら31日。

2月のうるう年なら29日までの表示にしたいわけです。


単純に上のセルを「+1」すると、翌月1日が表示されてしまうので、様々な条件を考えて、IF関数をつかうなどして、対応していました。


ところが、SEQUENCE関数という新しい関数が登場したことで、全く考え方が変わりました。


このSEQUENCE関数は、指定した回数の連番を設定することができます。


SEQUENCE関数がどのような関数なのかを確認しておきます。


A1に、

=SEQUENCE(5)

と設定しました。

SEQUENCE関数

すると、A1:A5に1からの連番を設定してくれました。

A1に設定した数式は、スピル機能によって、自動的に数式が拡張されます。

(A2:A5はゴースト)


引数に5と設定したので、5までの連番を設定してくれたわけです。


つまり、引数にDAY関数をつかってあげれば、日にち分の連番を入力してくれるはずです。


そこで、年月をセルに用意して、簡易カレンダーを作ってみました。

カレンダーの末日

A1には、年を設定します。「2024」としました。

A2には、月を設定します。「2」としました。

2024年2月は、うるう年なので29日まであります。


A5にSEQUENCE関数をつかって設定した数式は、

=SEQUENCE(DAY(DATE(A1,A2+1,0)))


これで、日にちが表示されます。


また、曜日も連動させたいので、

B5には、

=TEXT(DATE(A1,A2,A5#),"aaa")

という数式を設定します。


これで、完成です。


SEQUENCEをつかうことで、末日問題から、少しは逃げることができるかもしれませんね。


それでは、数式の内容を確認しておきましょう。


=SEQUENCE(DAY(DATE(A1,A2+1,0)))

引数の、列に設定してあるのが、DAY関数をつかって、「日」を抽出しています。


それが、

DAY(DATE(A1,A2+1,0))


DATE関数をつかって日にちをつくるわけですが、「月」を「月+1」として「日」を「0」とすることで、前月の末日をつくることができます。


そして、算出した日付の日をDAY関数で、抽出することで、末日の数値を抽出することができるというわけです。


あとは、曜日の数式です。

=TEXT(DATE(A1,A2,A5#),"aaa")


なんで、A5を参照しないで、改めてDATE関数をつかって、日付をつくっているのかというと、SEQUENCE関数は、日付ではなくて、数値を算出しています。


そのため、新たに、DATE関数をつかって日付を作る必要があります。


また、算出された結果を、オートフィルで数式をコピーするよりも、スピル機能をつかって、自動的に末日と連動させたいので、

DATE(A1,A2,A5#)

の引数の「日」を「A5#」と設定します。


今回紹介したSEQUENCE関数をはじめ、新しく追加された関数を知ることで、今まで色々考えないといけなかった数式がシンプルにすることができるかもしれませんね。

6/28/2023

Excel。FILTER関数の条件を直接日付で設定する場合DATE関数が必要です。

Excel。FILTER関数の条件を直接日付で設定する場合DATE関数が必要です。

<FILTER+DATE関数>

オートフィルターをつかわなくても、関数で該当するデータを抽出できるFILTER関数ですが、日付を条件として抽出するには、DATE関数が必要になります。

FILTER+DATE関数

A1:C6の表から、来訪日が2023/9/4のデータを別セルに抽出したいわけです。


そこで、FILTER関数を使用すると、手早く抽出することができます。


A9にFILTER関数をつかった数式は、

=FILTER(A2:C6,B2:B6=DATE(2023,9,4),"")


これで、抽出することができました。


なお、スピル機能によって、ゴーストが生まれるので、オートフィルを使わなくても、数式をコピーしてくれます。


なお、算出結果は「シリアル値」で表示されてしまうので、表示形式を使って日付に戻す必要があります。


さて、今回のポイントは、引数の条件に、直接、日付を入力する時にはDATE関数が必要ということです。


FILTER関数の2つ目の引数が、条件です。

条件に日付を使う時に、DATE関数が必要になります。


例えば、次のように、数式を変更してみましょう。

=FILTER(A2:C6,B2:B6="2023/9/4","")

日付にDATE関数を使わずに、「”(ダブルコーテーション)」で囲んでみると、表示してくれません。

 

「"2023/9/4"」とすると、日付ではなくて、文字として認識するのが原因のようです。


ちなみにExcel VBAやAccessの日付型で使用する「#」で囲んでみても、日付扱いにならず、「”(ダブルコーテーション)」と同じ空白の表示になってしまいます。


なお、セル番地に日付を入力しておけば、DATE関数を使用する必要はありません。


E1に日付を入力した場合のFILTER関数をつかった数式です。

=FILTER(A2:C6,B2:B6=E1,"")

2/26/2023

Excel。指定した日付をつくることができるのがDATE関数です。【DATE】

Excel。指定した日付をつくることができるのがDATE関数です。

<関数辞典:DATE関数>

DATE関数

読み方: デイト  

分類: 日付時刻 

DATE関数

DATE(年,月,日)

指定した日付を算出する

2/07/2023

Excel。セルごとに年・月・日が含まれているデータから日付をつくりたい【Date】

Excel。セルごとに年・月・日が含まれているデータから日付をつくりたい

<DATE+SUBSTITUTE関数>

データを読み込んでみたら、そのあとの作業がスムーズにできないで困るケースがあります。


例えば、年月日がセルごとにわかれているのですが、それぞれに、年・月・日という文字も含まれているために、DATE関数をつかって、手早く日付にすることができません。


DATE関数は、年月日に設定できるのが数値型でなければなりません。


「2023年」のように「年」が含まれていると、文字型になってしまいます。

左揃えになっていることからも、文字型になっていることがわかります。


当然、DATE(a2,b2,c2)としても、エラーが表示されてしまうだけで、日付にすることができません。


置換処理で、「年」とかの文字を空白にしてもいいですが、少し面倒です。


そこで、置換することができる関数であるSUBSTITUTE関数をDATE関数と組み合わせてつかうことで、解決することができます。


D2に次の数式を設定します。


=DATE(SUBSTITUTE(A2,"年",""),SUBSTITUTE(B2,"月",""),SUBSTITUTE(C2,"日",""))


オートフィルで数式をコピーしています。


「SUBSTITUTE(A2,"年","")」を説明します。

SUBSTITUTE関数の最初の引数は、文字列なので、A2を設定します。


2つ目の引数は、検索文字列。年という文字を削除したいので、「”年”」と設定します。


3つ目の引数は、置換文字列。年を削除したいので「””」とすることで、年を消すことができます。


これを、「月」と「日」にも同じように設定してきます。


セルに入力されているデータによっては、簡単に日付にすることができないこともありますので、すんなり日付にできない時には、文字型になっていないかを確認するところから始めてみるといいかもしれませんね。

1/02/2023

Excel。IF関数もつかわずに、手早く締め日から支払日を算出したい。【Closing date】

Excel。IF関数もつかわずに、手早く締め日から支払日を算出したい。

<DATE・YEAR・MONTH・DAY関数>

締め日と支払日。なかなかアレコレ考えて算出する必要があるので面倒だったりします。


締め日と支払日の日にちだけを入力するだけで、支払日を算出できるようにしていきます。


今回は、10日締めの翌20日払いのケースで、紹介していきますが、土日祝日だったら、それをよけるようにするというのは、除いています。


A列には、購入た日が入力されています。

E2には、10日締めなので、「10」と入力しています。

E3には、翌月20日払いなので、「20」と入力しています。


B列の支払日に数式を設定します。

=DATE(YEAR(A2),MONTH(A2)+1+(DAY(A2)>$E$2),$E$3)


締め日が10日より前だから、あとだからといったことを判断させるためのIF関数は使用していません。


20日締めの翌25日払いとかでもE2とE3を変更すれば対応できる数式です。


この数式を説明していきます。


DATE関数は、日付を算出する関数ですね。引数は、年・月・日を設定する必要があります。


引数の年は、YEAR関数を使用して算出します。


引数の月は、MONTH関数を使用することで「月」の数値を算出します。

A2の場合は「7」と算出されます。


そしてこの数式のポイントになるが、「+1+(DAY(A2)>$E$2」。


翌月の払いなので「+1」するのはイメージしやすいと思いますが、7月29日は8月10日に締めて、翌月である「9月」に支払が発生しますので、さらに「+1」する必要があります。


そこで「+(DAY(A2)>$E$2」で判断させています。


「(DAY(A2)>$E$2」のDAY関数は日付を抽出する関数なのでA2の日にちですから「29」と算出されます。


その値がE2である「20」より大きいという条件が成立しているのか、成立していないのかを判断させています。


「29>20」なので、成立しているので「TRUE」という結果になります。


Excelでは、「TRUE」が「1」で「FALSE」が「0」と設定されていますので、さらに「+1」されて、「9」という数値が算出されます。


これにより、月を「9月」とすることができました。


最後の引数の日ですが、20日なので、「E3」を設定します。


TRUEが「1」でFALSEが「0」というのを今まで使用していた数式に組み合わせてみると意外な発見があるかもしれませんね。

8/04/2022

Excel。日付を作るDATE関数でも、月末を簡単につくることができます。【The end of the month】

Excel。日付を作るDATE関数でも、月末を簡単につくることができます。

<DATE関数>

日付をつくることができる、DATE関数。

この関数は、アイディアで色々な日付をつくることができます。


例えば、EOMONTH関数をつかわなくても、月末日をつくることができるのです。


次の表をつかって説明します。


B1に営業日が入力されています。

B2には、営業日から見て、翌月末日を設定したい。

そこで、DATE関数をつかって、算出してみます。


B2の数式は、

=DATE(YEAR(B1),MONTH(B1)+2,0)

YEAR関数は、年を、MONTH関数は、月を設定することができます。


翌月なので、MONTH(B1)にプラス2をします。

翌月だから+1ではと思われますが、ここは+2にします。


最後の「日」ですが、「0」とします。


つまり、2022/10/0 という日付を作るわけですね。

すると、0日というのはないので、前日である、月末日を算出してくれるという仕組みです。


当然

DATE(2022,10,1)-1

という数式でも算出結果は当然変わりません。


このように、EOMONTH関数でなくても、月末日を算出することができました。

5/15/2022

Excel。手早く20日締め翌月末払いの日程表をつくりたい【payment】

Excel。手早く20日締め翌月末払いの日程表をつくりたい

<DATE・EDATE・DAY・YEAE・MONTH関数>

Excelの日付計算は、頭の中で考えるように、スムーズにいかないところがあります。


たとえば、次のような、20日締め翌月末払いの日程表をつくるとします。


A列に仕入日を入力すると、締め日と支払日が表示されるように数式を設定するわけですが、手早く作りたいわけです。


B列の締め日は、20日締めなので、20日より前ならば、同月20日ですが、21日以降ならば、翌月20日で表示したいわけです。


なお、今回は、土日祝日は考慮しておりません。


さて、20日より前とか後となれば、IF関数をつかって算出させればいいように思います。


B4にIF関数をつかった数式を設定するとすれば、

=IF(DAY(A4)<=20,DATE(YEAR(A4),MONTH(A4),20),DATE(YEAR(A4),MONTH(A4)+1,20))

確かに間違いではないのですが、当然長くなります。

わかりやすい反面、可読性が悪化します。


そこで、B4に次のような数式でも算出することができます。

=DATE(YEAR(A4),MONTH(EDATE(A4-20,1)),20)


数式がコンパクトになったことで、可読性が向上していますね。


それに、IF関数をつかわないで、算出しています。


締め日の着目点は、「20日前なのか後なのか」ということです。


そこで、MONTH関数の引数を確認します。


MONTH(EDATE(A4-20,1))

MONTH関数は、月を算出する関数です。


EDATEは、月ちがいの同日を算出する関数です。

仕入日から20減算した日付をつかい、EDATE関数で算出された月に「+1」した数値を月として、算出しています。


ケースとして、2022/4/21ならば、20日減算すると2022/4/1なので、月は、4+1で5と算出されます。


2022/5/20が締め日となり、2022/4/20ならば、20日減算すると、2022/3/31なので、月は、3+1で4と算出されます。


よって、2022/4/20が締め日と算出することができるというわけです。


このようなことから、IF関数をつかわないで、算出することができるというわけです。


支払日の数式は、IF関数で算出しても、締め日と同じ方法で算出しても、可動性に変わりは、あまりありません。


C4の数式は、

IF関数ならば、

=IF(DAY(A4)<=20,EOMONTH(A4,1),EOMONTH(A4,2))


EDATE関数ならば、

=DATE(YEAR(A4),MONTH(EDATE(A4-20,3)),1)-1


関数の説明をします。

=IF(DAY(A4)<=20,EOMONTH(A4,1),EOMONTH(A4,2))


この数式で使用している、EOMONTH関数は、月末日を算出する関数です。


20日以前ならば、一か月後の月末を算出し、それ以外は、二か月後の月末を算出することができます。


=DATE(YEAR(A4),MONTH(EDATE(A4-20,3)),1)-1

MONTH関数は、先程と同じで、20日減算した日の、同日の3か月後の月を算出しています。


2022/4/21のケースだと、20日減算するので、2022/4/1で、この同日の3か月後ですから、MONTH関数で算出された月は、「7」。

DATE関数で算出されるのが、2022/7/1。

この日から「-1」することで、前月末日。

すなわち、翌月末日を算出することができるので、2022/6/30と算出することができるわけです。


このように、Excelには、様々な日付の関数が用意されいるので、色々組み合わせてみると数式を改善することができるかもしれませんね。

12/10/2021

Excel。ピリオドで区切られた日付では計算でつかえない!どうしたらいいの?【DATE】

Excel。ピリオドで区切られた日付では計算でつかえない!どうしたらいいの?

<DATE・LEFT・MID・RIGHT関数>

見た目、日付とわかるからという感じで、何も考えないで入力している場合、Excelの機能を使えないということが、ちょこちょこあります。


例えば、次のような日付計算。


B4には、B2-B3。

C4には、C3-C3という数式が設定してあります。


B4には、#VALUE!というエラーが表示されていますが、C4は、普通に減算された結果が算出しています。


何が違うのかというと、B列の日付は、「.(ピリオド)」で区切られた日付になっています。


「.(ピリオド)」で区切られいる日付は、見た目が日付なだけで、Excelとしては、日付と認識していません。

「文字」として認識されているので、#VALUE!というエラーが表示されてしまっているのです。


最初から「/(スラッシュ)」で区切っていれば、問題はなかったのです。


今回のように、2件程度のデータならば、入力し直すことも容易ですが、件数が多い場合は、絶望的な作業となってしまいます。


そこで、「.(ピリオド)」を「/(スラッシュ)」に変換する方法を紹介していきます。

とても単純ですが、現場レベルとしては重要な作業です。


C2には、次の数式を設定してあります。

=DATE(LEFT(B2,4),MID(B2,6,2),RIGHT(B2,2))


年月日を別々のセルに算出するならば、YEAR関数やMONTH関数などをつかって、抽出するわけです。

ところが、「.(ピリオド)」で区切ってしまっていると文字型になってしまっているので、YEAR関数などの日付系の関数を使うことができません。


文字型のデータならば、LEFT関数・MID関数・RIGHT関数をつかうことで、対応することができます。


そして、DATE関数をつかうことで、日付にすることができます。

DATE関数の最初の引数は、「年」の設定です。

左から4文字が年ですから、

LEFT(B2,4)

と設定することで、「年」を抽出することができます。


次の引数ですが、左から6文字目からの2文字を抽出する必要があります。

文字列の途中の文字を抽出したいので、MID関数を使います。

MID(B2,6,2)

と設定することで、「月」を抽出することができます。


最後の引数ですが、MID関数を使うよりも、右から数えた方が簡単なので、RIGHT関数を使います。

RIGHT(B2,2)

と設定することで、「日」を抽出することができます。


あとは、オートフィルで数式をコピーしています。


ただし、日付にはなるのですが、「0(ゼロ付)」の日付になっていません。


そのため、表示形式のユーザー定義をつかって、「0(ゼロ付)」の日付にしてあげるといいですね。


なお、TEXT関数をつかってしまうと、「0(ゼロ付)」の日付にすることはできるのですが、日付文字型になってしまうので、注意が必要です。


入力するという作業では、今回のように、もったいないというか、あとで、面倒な作業が発生することもありますので、ちょっと気を遣う必要がありますね。

11/19/2021

Excel。条件付き書式の条件で日付を直接入力で設定すると、書式が反映されない【Date】

Excel。条件付き書式の条件で日付を直接入力で設定すると、書式が反映されない

<条件付き書式+DATE関数>

Excelの条件付き書式で、日付を条件で使用する時には、少し注意する必要があります。

セル参照をつかわないで、条件を直接入力して設定すると、設定した書式が反映されないで悩むことがあります。


次の表を使って説明していきます。


今回は、2021年10月1日より前の日のデータならば、行全体を塗りつぶす書式を設定するとします。


事前の確認として、行全体が対象となるので、複合参照を使う必要があります。


このことから、数式を使った設定をする必要があります。


また、データをみると、空白セルがあることから、AND関数をつかった数式を設定する必要があります。


A2:C11を範囲選択します。


ホームタブの条件付き書式の「新しいルール」をクリックします。

新しい書式ルールダイアログボックスが表示されます。


ルールの種類を「数式を使用して、書式設定するセルを決定」を選択して、次の数式を満たす場合に値を書式設定のボックスに数式を設定していきます。

=and($C2<>"",$C2<2021/10/1)

あとは、書式ボタンをクリックして、塗りつぶす色を選択します。


OKボタンをクリックしてみると、残念ながら、反映されていません。


数式のどこかに、原因があるわけです。

複数の条件が合致する場合に書式を反映させたいので、AND関数には問題はありません。


C2を複合参照で設定しているには、行全体を塗りつぶすためなので、問題はありません。


原因は、「日付」なのです。ここが、直接数式で設定する場合のポイントです。


数式の日付をみてみると、

$C2<2021/10/1

となっています。


一見問題ないように見えますね。

ここで「”(ダブルコーテーション)」で囲っていないからだと思うかもしれませんが、

$C2<”2021/10/1”

としたところで、状況に変化はありません。


なぜならば、今回の原因が、「シリアル値」にあるからです。

「”(ダブルコーテーション)」をつければ、文字になってしまいます。


どのようにしたら、シリアル値にすることができるのか?

わざわざ、条件の日付のシリアル値を調べて、その数値を入力するというのは、面倒です。


そこで、DATE関数をつかいます。


条件を次のように変更してみます。

=AND($C2<>"",$C2<date(2021,10,1))

実行して確認してみましょう。


条件に合致するデータの行全体を塗りつぶすことができました。


条件で日付をつかうことは、アチラコチラで発生しますが、その時に、うまくリアクションしないときには、シリアル値のことを思い浮かべることができるといいかもしれませんね。

9/21/2019

Excel関数辞典 VOL.18。CUMIPMT関数~DATEVALUE関数

Excel関数辞典 VOL.18。CUMIPMT関数~DATEVALUE関数

<Excel関数>

今回は、CUMIPMT関数~DATEVALUE関数までをご紹介しております。

DATEDIF関数・DATESTRING関数は直接入力でしか作れない関数ですね。

CUMIPMT関数
キュムアイピーエムティー:キュミュラティブ・イントレスト・ペイメント
元利均等返済における指定期間の金利累計を算出
CUMIPMT(利率,期間,現在価値,開始期,終了期,支払期日)


CUMPRINC関数
キュムプリンク:キュミュラティブ・プリンシプル
元利均等返済における指定期間の元金返済額累計を算出
CUMPRINC(利率,期間,現在価値,開始期,終了期,支払期日)


DATE関数
デイト
指定した日付を算出
DATE(年,月,日)


DATEDIF関数
デイトディフ
2つの日付の間の年・月・日数を算出する
DATEDIF(開始日,終了日,単位)


DATESTRING関数
デイトストリング
西暦の日付を和暦の日付に変換する
DATESTRING(シリアル値または日付文字列)


DATEVALUE関数
デイトヴァリュー
日付を表す文字列をシリアル値に変換する
DATEVALUE(日付文字列)

7/27/2019

Excel。元号年月日がセルごとにわかれているのを日付にしたいけど結構ややこしい【DATE】

Excel。元号年月日がセルごとにわかれているのを日付にしたいけど結構ややこしい

<文字結合・DATE関数>

セルごとに年月日がわかれている場合は、日付として認識されませんので通常の日付として表示したい場合、西暦だと簡単なのですが、元号で管理されている場合は、結構ややこしいことになるので、確認していきましょう。

基本形から確認しておきましょう。

B列に年、C列に月、D列に日とわかれて管理されていますが、E列に日付にするには、DATE関数を使うことで対応できます。

E2をクリックして、直接数式を入力してもOKですが、DATE関数のダイアログボックスを表示してみることにします。

年に、B2。月に、C2。日に、D2と入力してOKボタンをクリックしてみましょう。

このように簡単に日付に変わりました。表示形式で和暦にすることもできます。
E2の数式は、
=DATE(B2,C2,D2)
です。

【英短縮元号を日付にするには、ハイフンで文字結合】

ところが元号で管理している場合は、DATE関数では太刀打ちできません。

元号をアルファベットの英短縮元号から確認してみましょう。

A5のHは平成のHで、Rは令和を表すアルファベットです。

先程のDATE関数には、元号という引数はありませんので、使えません。

英短縮元号の場合は、ハイフンを使って文字結合すれば、日付文字列にすることができます。

E5に
=A5&B5&-C5&-D5
と入力してみましょう。

オートフィルを使って数式をコピーすると、令和も対応していることが確認できます。

これ文字では?と思うかもしれませんが、隣のセルに翌日の日付を入力します。

その日付とハイフンで結合した日付を減算してあげれば、1と算出されますので、日付として認識されています。

注意点としては、日付ではなくて、日付文字列になっています。通常の日付は入力されると、右揃えになりますが、文字を入力した時と同じ左揃えになっています。

【和暦元号は年月日を付けて結合する】

元号が、和暦。すなわち漢字で入力されている場合は、ハイフンで結合することができません。当然、DATE関数もつかえない。

この場合は、&で文字結合するのですが、年月日をそれぞれ後ろにつけて結合する必要があります。

E9の数式は、
=A9&B9&"年"&C9&"月"&D9&"日"

英短縮元号と和暦元号で結合方法が変わりますので、注意が必要です。

氏名や住所などは、細かく分けて入力しておいて、セル結合させるように管理するといいのですが、日付に関しては、日付として入力して管理することをお勧めします。

【日付文字列を日付にする】

今回紹介したのは、日付ではなくて、日付文字列になっていますので、このままでは、表示形式で西暦変換することができません。

どのようにしたらいいのでしょうか?
解決方法は次のようにすれば、日付文字列を日付に変換することができます。

最初に範囲選択して、表示形式を日付にしておきます。

今回は「標準」から「長い日付形式」に変更しました。

そして、E9の数式を次のように修正して、オートフィルを使って数式をコピーします。

=(A9&B9&"年"&C9&"月"&D9&"日")*1

カッコで覆い、×1するだけで、文字列を数値に変換することができます。

DATEVALUE関数を使う方法もありますが、「×1」するほうが簡単です。

本来ならば、シリアル値に変わるのですが、すでに表示形式を日付に変更していますので、西暦表示に変更することができました。

日付の管理・コントロールは実務でよく発生することなので、日付を入力する場合には、最初から日付として一つのセルに入力して、表示形式を使うことをお勧めします。