単純に考えると、
nMonths = DateDiff("m", dtm1, dtm2)
と書けばよさそうだが、これで求まる月数って? 例えば、
dtm1 = #2004/01/31# dtm2 = #2004/02/01#
の場合、0 ヶ月? 1 ヶ月? それとも 2 ヶ月?
手元で試してみた結果では nMonths = 1 になった。他にもいくつかのパターンでやってみたが、「年月部分だけを見て、単純に引き算した結果」ということのようだ。
しかし、その根拠となる文章がヘルプにもない。唯一近いのは
12 月 31 日とその次の年の 1 月 1 日を比較すると、DateDiff 関数の年 ("yyyy") は、1 日後であっても、1 を返します。
という記述で、月数計算 ("m") でも同じ考え方なのだろうと推測できる。
が、VB/VBA の日付系関数って、「地域の設定」に依存するのが多いので、どうもアテにできない感じがする……。つーか仕様はちゃんと明文化してくれ! なんのためのリファレンスだよ!