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に移植されたものです。
Excelのマクロは5.0からはVBAで記述するようになっていますが、それ以前のExcelは違いました。昔のExcelのマクロは、マクロシート上にワークシート関数のように記述するようになっていたのです。
これが今でも裏技的に利用されることもある、「Excel 4.0 マクロ」というものです。(このサイトではExcel 4.0 マクロについて次のようなネタをご紹介しています。「Excel 4.0 マクロとは」「Excel 4.0 マクロのサンプル」)
また、Excel以外のWordやAccessでは、それぞれ独自のマクロ言語が採用されていました。WordにはWordBasic、AccessにはAccessBasicという別のマクロ言語が。
つまり同じOfficeアプリケーションでありながら、マクロ機能についてはバラバラだったのです。昔のOfficeは。
このマクロ言語を統一しようということで、プログラム言語VBを元に考えられたのが、VBA(Visual Basic for Applications)なのです。
つまり、今でこそ同じExcel上で動く、VBAの関数とワークシート関数とは、そのルーツがまったく別物なのです。
だから、同じような関数なのに別の名称がついていることや、同じ名称の関数なのに結果が異なることの方が普通のことなのです。元来まったく別物なのですから。

>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST