【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。IMMRです。ExcelVBAには、日付を操作する関数があります。
「頻繁に使われるもの」もあれば「あまり使われないもの」もありますがいくつか紹介していきます。
日付から年、月、日を取得するには、Year関数、Month関数、Day関数を使用します。
指定した日付から年、月、日のいずれかを取得します。
書き方 Year(日付)、Month(日付)、Day(日付)
サンプルコード
※ "#"で囲むと日付リテラル値になります。順番としては、#月/日/年#となります。
Sub TEST1()
MsgBox Year(#4/1/2021#) ・・・1-1
MsgBox Month(#4/1/2021#) ・・・1-2
MsgBox Day(#4/1/2021#) ・・・1-3
End Sub
1-1の実行結果は、「2021」
1-2の実行結果は、「4」
1-3の実行結果は、「1」とメッセージボックスが表示されます。
日付かどうか確認するには、IsDate関数を使用します。
指定した文字列が日付かを確認して、日付ならTRUE、それ以外ならFALSEです。
書き方 ISDate(文字列)
サンプルコード
Sub TEST2()
MsgBox IsDate(#4/1/2021#) ・・・2-1
MsgBox IsDate(12345) ・・・2-2
MsgBox IsDate("ABCDE") ・・・2-3
End Sub
2-1の実行結果は、「TRUE」
2-2の実行結果は、「FALSE」
2-3の実行結果は、「FALSE」とメッセージボックスが表示されます。
指定した2つの日付から間隔を取得するにはDateDiff関数を使用します。
指定した2つの日付から間隔を取得して、設定した日付単位で年単位、月単位、日単位を表示します。
書き方 DateDiff(時間単位, 日付1, 日付2)
時間単位
設定値 | 内容 |
---|---|
yyyy | 年 |
m | 月 |
y | 年間通算日 |
d | 日 |
w | 週日 |
ww | 週 |
サンプルコード
Sub TEST3()
MsgBox DateDiff("y", #4/1/2020#, #4/1/2021#) ・・・3-1
MsgBox DateDiff("yyyy", #4/1/2020#, #4/1/2021#) ・・・3-2
MsgBox DateDiff("m", #4/1/2020#, #4/1/2021#) ・・・3-3
MsgBox DateDiff("d", #5/1/2020#, #4/1/2021#) ・・・3-4
MsgBox DateDiff("w", #4/1/2021#, #4/7/2021#) ・・・3-5
MsgBox DateDiff("ww", #4/1/2021#, #4/7/2021#) ・・・3-6
End Sub
3-1の実行結果は、「365」
3-2の実行結果は、「1」
3-3の実行結果は、「12」
3-4の実行結果は、「335」
3-5の実行結果は、「0」
3-6の実行結果は、「1」とメッセージボックスが表示されます。
指定日付から加算・減算した日付を取得するにはDataAdd関数を使用します。
指定した日付から加算・減算した日付を表示します。加算するのは年、月、日などがあります。
書き方 DataAdd(時間単位, 加算する数値, 日付)
※時間単位の詳細については、「日付を操作をする関数③ 【2つの日付の間隔を取得】」で説明したものと同じです。
サンプルコード
Sub TEST4()
MsgBox DateAdd("y", 1, #4/1/2010#) ・・・4-1
MsgBox DateAdd("yyyy", 1, #4/1/2010#) ・・・4-2
MsgBox DateAdd("m", 2, #4/1/2010#) ・・・4-3
MsgBox DateAdd("d", -10, #5/1/2010#) ・・・4-4
MsgBox DateAdd("w", 1, #4/1/2010#) ・・・4-5
MsgBox DateAdd("ww", 1, #4/1/2010#) ・・・4-6
End Sub
4-1の実行結果は、「2010/04/02」
4-2の実行結果は、「2011/04/01」
4-3の実行結果は、「2010/06/01」
4-4の実行結果は、「2010/04/21」
4-5の実行結果は、「2010/04/02」
4-6の実行結果は、「2010/04/08」とメッセージボックスが表示されます。
現在の日付を取得するにはNow関数, Dare関数を使用します。
表示をした時の日付+時間、日付を表示します。そのため、処理を実行した日時によって変わります。
書き方 Now, Date ※設定値はありません。
サンプルコード
Sub TEST5()
MsgBox Now ・・・5-1
MsgBox Date ・・・5-2
End Sub
5-1の実行結果は、「処理を実行した日付+時間」 例:2021/04/01 19:45:30
5-2の実行結果は、「処理を実行した日付」例:2021/04/01 とメッセージボックスが表示されます。
指定日付から曜日を取得にはWeekday関数&WeekdayName関数を使用します。
指定した日付からWeekday関数とWeekdayName関数を使用して、曜日を取得します。
方法については、下記記事で紹介していますので、ご参照下さい。
【Excel VBA】日付から曜日を確認する方法(WeekdayNameを使用)
和暦の日付から西暦の日付から曜日を取得にはDateValue関数を使用します。
和暦の日付からDateValue関数より西暦の日付を取得します。
書き方 DateValue(日付)
サンプルコード
Sub TEST7()
MsgBox DateValue("令和2年7月1日") ・・・7-1
End Sub
7-1の実行結果は、「2020/07/01」 とメッセージボックスが表示されます。
日付の書式を取得にはFormat関数を使用します。
日付の書式を変更しますが表示方法は記号で変わってきます。
書き方 Format(日付, 表示方法)
①表示方法(日付偏)
記号 | 内容 |
---|---|
yyyy | 西暦(4桁) |
yy | 西暦(下2桁) |
mm | 月(0~9の場合、頭に0が付く) |
m | 月(0~9の場合、頭に0が付かない) |
dd | 月(0~9の場合、頭に0が付く) |
d | 月(0~9の場合、頭に0が付かない) |
②表示方法(曜日偏)
記号 | 内容 |
---|---|
aaaa | 曜日(3文字で表示) |
aaa | 曜日(頭1文字で表示) |
dddd | 曜日(英語で表示) |
ddd | 曜日(英語、頭3文字で表示) |
③表示方法(年号偏)
記号 | |
---|---|
ggg | 年号 |
gg | 年号(頭1文字で表示) |
ee | 和暦(0~9の場合、頭に0が付く) |
e | 和暦(0~9の場合、頭に0が付かない) |
サンプルコード① (日付偏)
Sub TEST8_1()
MsgBox Format(#1/9/2020#, "yy") ・・・8-1-1
MsgBox Format(#1/9/2020#, "yyyy") ・・・8-1-2
MsgBox Format(#1/9/2020#, "mm") ・・・8-1-3
MsgBox Format(#1/9/2020#, "m") ・・・8-1-4
MsgBox Format(#1/9/2020#, "dd") ・・・8-1-5
MsgBox Format(#1/9/2020#, "d") ・・・8-1-6
End Sub
8-1-1の実行結果は、「20」
8-1-2の実行結果は、「2020」
8-1-3の実行結果は、「01」
8-1-4の実行結果は、「1」
8-1-5の実行結果は、「09」
8-1-6の実行結果は、「9」とメッセージボックスが表示されます。
サンプルコード② (曜日偏)
Sub TEST8_2()
MsgBox Format(#1/9/2020#, "aaaa") ・・・8-2-1
MsgBox Format(#1/9/2020#, "aaa") ・・・8-2-2
MsgBox Format(#1/9/2020#, "dddd") ・・・8-2-3
MsgBox Format(#1/9/2020#, "ddd") ・・・8-2-4
End Sub
8-2-1の実行結果は、「木曜日」
8-2-2の実行結果は、「木」
8-2-3の実行結果は、「Thursday」
8-2-4の実行結果は、「Thu」とメッセージボックスが表示されます。
サンプルコード③ (年号偏)
Sub TEST8_3()
MsgBox Format(#1/9/2020#, "ggg") ・・・8-3-1
MsgBox Format(#1/9/2020#, "gg") ・・・8-3-2
MsgBox Format(#1/9/2020#, "ee") ・・・8-3-3
MsgBox Format(#1/9/2020#, "e") ・・・8-3-4
End Sub
8-3-1の実行結果は、「令和」
8-3-2の実行結果は、「令」
8-3-3の実行結果は、「02」
8-3-4の実行結果は、「2」とメッセージボックスが表示されます。
今まで説明してきた(日付偏)、(曜日偏)、(年号偏)を結合して行うことも出来ます。
サンプルコード④ (結合偏)
Sub TEST8_4()
MsgBox Format(#1/9/2020#, "yyyy/mm/dd") ・・・8-4-1
MsgBox Format(#1/9/2020#, "yy年m月d日") ・・・8-4-2
MsgBox Format(#1/9/2020#, "gge年m月d日") ・・・8-4-3
MsgBox Format(#1/9/2020#, "ggge年mm月dd日") ・・・8-4-4
MsgBox Format(#1/9/2020#, "ggee年mm月md日") ・・・8-4-5
MsgBox Format(#1/9/2020#, "ggee年m月d日") ・・・8-4-6
MsgBox Format(#1/9/2020#, "yyyy/mm/dd(aaaa)") ・・・8-4-7
MsgBox Format(#1/9/2020#, "ggee年m月d日(ddd)") ・・・8-4-8
End Sub
8-4-1の実行結果は、「2020/01/09」
8-4-2の実行結果は、「20年1月9日」
8-4-3の実行結果は、「令2年1月9日」
8-4-4の実行結果は、「令和2年01月09日」
8-4-5の実行結果は、「令02年01月09日」
8-4-6の実行結果は、「令02年1月9日」
8-4-7の実行結果は、「2020年01月09日(木曜日)」
8-4-8の実行結果は、「令02年1月9日(Thu)」とメッセージボックスが表示されます。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート