GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−VBAでいろんなテクニック
  日付操作関数についてもっと知ろう!
 
■ 日付操作関数についてもっと知ろう

あなたがVBAの開発を行っているときに、1か月後の日付が欲しいとか、この日付と日付の間隔を求めたい、と思うことはありませんか? VBAには便利な日付操作の関数がたくさん用意されており、日付や時刻の様々な操作・加工を行うことが可能です。今回は、この日付操作関数について解説します。

シリアル値について

シリアル値とは、整数部に日付データを、小数部に時刻データを割り当てた数値です。VBAの中で日付データは、このシリアル値で記録されています。日付部は、1899年12月31日からの経過日数を、時刻部には1日を1として午前0時からどのくらい時間が経過したかを割り当てています。

日付リテラルについて

コードの中で直接日付を指定する必要がある場合、「#2009/1/31#」のように、「#(シャープ)」で日付の先頭と終わりを囲みます。日付リテラルは、入力後に「#1/31/2009#」(月/日/年)の順番に自動的に並べ替えられます。コードの中で日付を扱う場合、数字による日付や文字列の日付では何かと不便ですし、日付以外のデータとして扱われてしまう危険性があります。日付リテラルを使うことで、プログラムの中で確実に日付データとして認識させることができます。

Date関数 Year関数 Month関数 Day関数
Date関数は現在の日付を、Year関数 Month関数 Day関数は引数の日付から年、月、日をそれぞれ返します。

[書式]
Date()

引数はありません。

Year(日付)
Month(日付)
Day(日付)

引数の省略はできません。

[使用例]
Sub Test()
  Dim MyDate As Date
  MyDate = Date
  Debug.Print Year(MyDate)
  Debug.Print Month(MyDate)
  Debug.Print Day(MyDate)
End Sub
 
コードを実行すると、変数「MyDate」に今日の日付が格納され、年、月、日、がそれぞれイミディエイトウィンドウに出力されます。

Time関数 Hour関数 Minute関数 Second関数
Time関数は現在の時刻を、Hour関数 Minute関数 Second関数は引数の時刻から時、分、秒をそれぞれ返します。

[書式]
Time()

引数はありません。

Hour(時刻)
Minute(時刻)
Second(時刻)

引数の省略はできません。

[使用例]
Sub Test()
  Dim MyTime As Date
  MyTime = Time
  Debug.Print Hour(MyTime)
  Debug.Print Minute(MyTime)
  Debug.Print Second(MyTime)
End Sub

コードを実行すると、変数「MyTime」に現在の時刻が格納され、時、分、秒、がそれぞれイミディエイトウィンドウに出力されます。

DateAdd関数
日付に指定された時間間隔を追加し、その結果の日付を取得します。負の数を指定することで過去の日付を取得することもできます。

[書式]
DateAdd(interval, number, 日付)

引数の省略はできません。
引数「interval」の主な設定値と内容
yyyy
m
d
ww
h
n
s
引数「number」には、追加する時間間隔を数値で指定します。将来の日付を取得するには正の数を、過去の日付を取得するには負の数を、それぞれ指定します。

[使用例]
Sub Test()
  Debug.Print DateAdd("YYYY", 1, #4/1/2009#)
  Debug.Print DateAdd("M", 1, #4/1/2009#)
  Debug.Print DateAdd("D", 1, #4/1/2009#)
  Debug.Print DateAdd("D", -1, #4/1/2009#)
End Sub
 
コードを実行すると、イミディエイトウィンドウに、
「2010/04/01」
「2009/05/01」
「2009/04/02」
「2009/03/31」
をそれぞれ出力します。

DateDiff関数
指定した2つの日付の間隔を返します。

[書式]
DateDiff(interval, 日付1, 日付2)

引数の省略はできません。
引数「interval」の主な設定値と内容は、DateAdd関数と同じです。

[使用例]
Sub Test()
  Debug.Print DateDiff("YYYY", #4/1/2009#, #3/31/2010#)
  Debug.Print DateDiff("M", #4/1/2009#, #3/31/2010#)
  Debug.Print DateDiff("D", #4/1/2009#, #3/31/2010#)
  Debug.Print DateDiff("WW", #4/1/2009#, #3/31/2010#)
End Sub

コードを実行すると、イミディエイトウィンドウに、「1」「11」「364」「52」をそれぞれ出力します。

DatePart関数
日付、時刻から時間単位を取り出します。

[書式]
DatePart(interval, 日付)

引数の省略はできません。
引数「interval」の主な設定値と内容は、DateAdd関数と同じです。

[使用例]
Sub Test()
  Debug.Print DatePart("YYYY", #1/31/2009#)
  Debug.Print DatePart("M", #1/31/2009#)
  Debug.Print DatePart("D", #1/31/2009#)
  Debug.Print DatePart("WW", #1/31/2009#)
End Sub

コードを実行すると、イミディエイトウィンドウに、「2009」「1」「31」「5」をそれぞれ出力します。

DateSerial関数 TimeSerial関数
DateSerial関数は、年月日に対応する数値から日付を返します。TimeSerial関数は、時分秒に対応する数値から時刻を返します。

[書式]
DateSerial(年, 月, 日)
TimeSerial(時, 分, 秒)

引数の省略はできません。

[使用例]
Sub Test()
  Dim i As Long
  For i = 1 To 5
    Debug.Print DateSerial(2009 + i, 1, 31) & " " & TimeSerial(9 + i, 0, 0)
  Next i
End Sub

コードを実行すると、イミディエイトウィンドウに、
「2010/01/31 10:00:00」
「2011/01/31 11:00:00」
「2012/01/31 12:00:00」
「2013/01/31 13:00:00」
「2014/01/31 14:00:00」
をそれぞれ出力します。

DateValue関数 TimeValue関数

DateValue関数は、日付を表す文字列から日付を返します。TimeValue関数は、時刻を表す文字列から時刻を返します。

[書式]
DateValue(日付)
TimeValue(時刻)

引数の省略はできません。

[使用例]
Sub Test()
  Debug.Print DateValue("2009/1/1")
  Debug.Print TimeValue("11:59:59")
End Sub

コードを実行すると、イミディエイトウィンドウに、「2009/01/01」「11:59:59」を、それぞれ出力します。

Timer関数
午前0時からの経過時間を返します。

[書式]
Timer()

引数はありません。

[使用例]
Sub Test()
  Dim MyTime As Single
  MyTime = Timer
  MsgBox "OKボタンを押してください"
  Debug.Print "OKボタンを押すまでに" & Timer - MyTime & "秒かかりました"
End Sub

コードを実行すると、メッセージボックスが表示されます。[OK]ボタンをクリックすると、イミディエイトウィンドウに[OK]ボタンをクリックするまでにかかった秒数を出力します。
「MyTime = Timer」で変数「MyTime」に現在の経過時間を格納しました。「Timer - MyTime」で現在の経過時間から、先ほど格納した経過時間を引いています。そのため、コードの3行目が処理されてから5行目が処理されるまでにかかった秒数が出力されました。

Weekday関数 WeekdayName関数
Weekday関数は、指定された日付の曜日を返します。WeekdayName関数は、指定された曜日を表す曜日名を返します。

[書式]
Weekday(日付)
Weekday(曜日を表す数値)

引数の省略はできません。

[使用例]
Sub Test()
  Debug.Print Weekday(Date)
  Debug.Print WeekdayName(Weekday(Date))
End Sub

コードを実行すると、今日の日付の曜日を表す数値と曜日名をイミディエイトウィンドウに出力します。例えば今日が水曜日なら、「4」「水曜日」と出力されます。

Now関数
Now関数は、現在の日付と時刻を返します。

[書式]
Now()

引数はありません。

[使用例]
Sub Test()
  Debug.Print Now
End Sub

コードを実行すると、「20XX/XX/XX XX:XX:XX」と現在の日付と時刻がイミディエイトウィンドウに出力されます。


以上、日付操作関連の関数について紹介しました。
なお、引数に関しては代表的なものだけを解説してあります。

プログラムの中で日付を操作する必要があるとき、これらの日付操作関数を利用することで、より正確で効率的な記述を行うことが可能です。
ぜひ、マスターしてください。
 

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,