VBA関数とワークシート関数はなぜ違う|Excel(エクセル)|Excel(エクセル)マクロ・VBA
Excelユーザーで、VBA(Visual Basic for Applications)に触れ始めた方から時々いただく疑問・質問があります。
「VBAの関数とワークシート上で使える関数はなぜ違うのですか?」
というご質問です。
例えば、
今日の日付を取得するのは、
VBA関数の場合は「Date」ですが、
ワークシート関数では「TODAY」です。
日付の間隔を取得するのは、
VBA関数の場合は「DateDiff」ですが、
ワークシート関数では「DATEDIF」です。
(よく似ていますが、最後の「F」の数が違います。)
厄介なことに同じスペルで似たような動作をするのに実は違うものもあります。
VBA関数の「Round」は丸めを行いますが、
ワークシート関数の「ROUND」は四捨五入を行います。
同じExcelというソフトウェア上で動いている関数なのに、なぜ違うのか、というのがご質問の主旨です。
結論から言えば、ワークシート関数とVBA関数とは、まったく別ものだからです。同じExcel上で動作していても。
同じ動作をする関数は、たまたま、同じであったにすぎません。
むしろ、同じ名称で同じ動作をする関数の方が、特殊と考えるほうがいいでしょう。
このことは、今現在のExcelだけを見ていると、納得しがたいかもしれませんが、ExcelとVBAそれぞれの過去や歴史を知ると、理解できるんじゃないかと思います。
Excelとは無関係に、Quick Basicという言語を元に、VB(Microsoft Visual Basic)というプログラム言語が1991年に発表されています。VBAはVBを元にして、1994年のExcel 5.0ではじめて採用されました。
Excelのほうは元々マッキントッシュ用の表計算ソフトで、それがWindowsに移植されたものです。