2018年1月13日土曜日

VBA のユーザー関数の名前の怪

今更ながらですが、同じVBA でも Access と Excel では微妙に違いますね。

今回陥ったのは、ユーザー関数の名前の付け方です。

今までAccess で使っていたユーザー関数をそのままExcel に流用しようとしました。

Access ではこんな感じ。
----------------------------------------------------
Function aaa1( V_1 as String) as String
     aaa1 = "答えは = " & V_1
End Function
----------------------------------------------------

めっちゃ単純化していますけど、まあこんな感じで、ちゃんと運用しています。

これをそのまま Excel にコピーしました。
そして、ワークシート上で使うと、そのセルには、
#REF!
というエラーが表示されています。

これはかなりはまりました。

関数の処理内容はいたって簡単なのに、なぜ?

しかも混乱に拍車をかけたのが、
Excel でも、プロシージャの中で使うと問題なく答えが返ってきます。

なぜ?なぜ?なぜ?なぜ?

ここでふと気づきました。
エラーが「#REF!」ってことは、参照先のセルが不正。
ってことは、これは関数を呼んでいるのではなく、セルを参照している?

ということは、aaa1 というのはユーザー関数とは思われていなくて、
R1C17576 のセルを参照していて、その後に()が付いているので、参照不可。

ということで、関数名を「aaa_1」とかのアルファベットのあとにすぐ数字が来ないような名前にしたら、問題なく処理できました。






0 件のコメント:

コメントを投稿