本ブログは2009年4月21日で終了しました。
今後はアイビースターでブログを運営していますので
そちらをご覧ください。
Posted by Hibi at 06:30
VBAのDate関数は変じゃない?!


Microsoft社のOfficeには「IIF」や「Trim」などいろいろな関数が用意されています。その中でもよく使用する関数として「Date」関数があります。

このDate関数を使用していて疑問に思うことが最近起きました。

その理由については以下を参照ください。
プログラムの世界では「関数」というのはごく当たり前のものです。数学が苦手な人にとっては「関数」と聞いただけで諦めてしまうかもしれませんが、それほど難しいものではありません。

知らない人の為に関数を簡単に説明するとe-Words曰く
引数と呼ばれるデータを受け取り、定められた通りの処理を実行して結果を返す一連の命令群。
とのこと。

もう少し簡単に説明すると、ある値を関数に渡すと指定した処理を行ってその結果を返してくれるマジックボックスのようなものです。

OfficeなどのVBAでは下記の様に括弧の中へ値(引数)を入れるとその答えが返ってきます。
関数(引数)=答え
Officeの関数にはDate関数というものがあるのですが、この関数は特に値を渡さなくても答えを返してきます。返してくる答えはWindowsで表示している日付を返します。例えば今日が2007年9月11日の場合、VBAのイミディエイトウィンドでDate関数を使用すると
? Date
2007/09/11
となります。

VBAにはそれ以外に日付と時間を返してくれるNow関数や時間だけを返してくれるTime関数などもあります。

さて、このDate関数なのですが、関数と称しているにもかかわらずみょうちくりんな事ができます。

通常、VBAの場合は関数に値を渡す時はカッコ内に引数として渡すのですが、Date関数はイコールで値を渡す事ができてしまうのです。それも通常、Date関数は値を返すだけの一方通行の関数のはずなのに値が渡せてしまう事がおかしいのです。

例えば、Date関数に2010年3月15日の値をイコールで渡し、直ぐにDate関数の結果を求めてみると
Date=#2010/03/15#
? Date
2010/03/15
と返ってきます。

Date関数がクラスのプロパティなら値が渡せるのもまだ納得できるのですが、「関数」と称しているのだし、尚且つ、Windowsのシステム日付を渡す関数なのだから値を入れられちゃまずいのではないの?

そして、驚くのはDate関数を設定する事によってWindowsの日付が変わってしまうのです。

VBAのDate関数は変じゃない?!



それっておかしくない?

値を入れる事ができる関数としてはTime関数もDate関数と同じように値を入れる事ができます。これに対してNow関数は値を入れる事はできません。

MSさん、この辺の説明ってどこかに書いてくれませんかね~(-o-)

もし、この件に関しての情報がありましたら教えてくださいm(__)m

【参考サイト】
MSDN Library:文字列と日付の操作:VBA のヒントとコツ



同じカテゴリー(開発言語)の記事
 
Category is 開発言語.
<%PingExcerpt%>
<%PingBlogName%> at <%PingDateTime%>
削除
VBAのDate関数は変じゃない?!