【VBAスタンダードに挑戦!】
本日の5分勉強の内容
********************************************************
ワークシート関数
・ワークシートで使用している関数をマクロでも使用できる
・WorksheetFunction. 関数名 (引数)
・引数はワークシートで使用するとき と同じように指定する
・記述方法は VBA のルールに従う
例) A1 (ワークシート) vs Range("A1") (VBA)
・ワークシート関数では呼び出せない関数もある
例えば、セルの中で使用する If 関数は、マクロでは使えない
(同じ書き方で使えない)
・使用できる関数はヘルプで確認するか、
WorksheetFunction. (ドッドまで)を記述すれば、
候補が表示されるので、そこで確認する
EOMONTH 関数
・End Of MONTH
・指定した月の末日を調べる
・EOMONTH(開始月, 月)
DateSerial 関数
・シート上で「2020」と記載されていても Excel はその数字が、
年なのか、数値なのか、金額なのか判断できない。
年と判断させるために DateSerial 関数が使用できる
・DateSerial(年, 月, 日)
With WorksheetFunction
Range("F3")=.EoMonth(DateSerial(Range("B3"), Range("C3"), 1), 60 - Range("D3") *12+1)
End With
・60歳なる年の、入社月の前月末を退職日とする
・DateSerial 関数で、「1980」(赤枠)と「4」(青枠)を日付と定義する
・60(歳)から入社当時の年齢(緑枠)をマイナスして、
12(ヵ月)をかけて、1マイナスする(1か月分引いて、前月にする)
ー>EoMonth 関数の引数、開始月から何か月目かを指定するのに使用する
もう少し、実際的にしてみた。
Sub 退職日計算()
Dim WY As Long 'Work Year の略とした
Dim r As Long '行を表すのに使う
With WorksheetFunction
For r = 3 To 5
WY = 60 - Cells(r, 4) 'EOMONTH 関数の引数に使う
Cells(r, 6) = Format(.EoMonth(DateSerial(Cells(r, 2), Cells(r, 3), 1), WY * 12 - 1), "yyyy/mm/dd")
'Format 関数で表示形式を日付で指定しないと、シリアル値が返される
Next r
End With
End Sub
********************************************************
なんとなくサンプルでコードを作成してみましたが、
この関数は、「誰が」「どこで」使用するのか(使用しているのか)
まったく想像できません。
SEの部署で勤務している私には、使用する機会がありません。
日付を気にするお仕事ってどんな職種でしょう?
人事とか庶務さんのお仕事でしょうか?
!!!
きっと、この関数自体をそのまま使用するのではなく、
「この関数を経由して、変換してから、期待した結果を表示する」
って感じで使用するんだ!(そうかな?)
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/