- ベストアンサー
WorksheetFunctionについて
- vbaのWorksheetFunctionは一般的にどこまで省略して良いのでしょうか?Findを例にすると、Application.WorksheetFunction.Find("b", "abc")になると思うのですが、Sub Sample() Debug.Print Application.WorksheetFunction.Find("b", "abc") Debug.Print WorksheetFunction.Find("b", "abc") Debug.Print Application.Find("b", "abc") End Sub 全てのコードが問題なく実行できました。私が今作成しているファイルはみんなで使うファイルなので出来るだけ一般的な書き方で記載したいのですが、WorksheetFunctionを使う場合は、フルのApplication.WorksheetFunction.Findを使った方が良いのでしょうか?ちなみにFind("b", "abc")はコンパイルエラーになりました。
- vbaのWorksheetFunctionについての疑問です。一般的にどこまで省略して良いのでしょうか?例えば、Find関数を使う場合、正しくはApplication.WorksheetFunction.Find("b", "abc")になると思いますが、WorksheetFunction.Find("b", "abc")やApplication.Find("b", "abc")でも問題なく実行できました。みんなで使うファイルでは、一般的な書き方で記載したいので、どちらの書き方が良いのか教えてください。ちなみに、Find("b", "abc")ではコンパイルエラーになりました。
- vbaのWorksheetFunctionについて教えてください。一般的にどこまで省略して良いのでしょうか?例えば、Find関数を使う場合、Application.WorksheetFunction.Find("b", "abc")と記載すべきですか?それともWorksheetFunction.Find("b", "abc")やApplication.Find("b", "abc")でも問題ないのでしょうか?みんなで使うファイルでは一般的な書き方をしたいと思っていますが、正しい書き方を教えてください。なお、Find("b", "abc")ではコンパイルエラーになりました。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
基本的に、この2つは管理するオブジェクトが違います。 Application.WorksheetFunction.Find("b", "abc") Application.Find("b", "abc") Application.WorksheetFunctionは、VBAの中のWorksheetFunctionに納められている関数で、VBA全体に及びます。WorksheetFunction も同じことです。 Application.Find は、Excelのワークシート側を使っています。従って、一般的なエラー値を返します。戻り値を、IsErrorなどで、エラー値を取得することが可能ですが、WorksheetFunction は、エラー値は、VBAのエラー値ですから、エラートラップ(On Error)を使わなくてはなりません。 多くの教本では、WorksheetFunctionを使うようになっていますが、Application.Findは、Excel97(以下)仕様ということで、オフィシャルでは使われません。しかし、VBA愛好家の間では、未だに使われています。Excel2000になった時に、Application.(関数)は、いずれ使われなくなると言われていました。公式には、認められてはいないようですが、今日に至るまで、利用できています。 どちらがどうという機能の違いはないのですが、感覚的に、Application.(関数)のほうが、若干、エラー値を捉まえるのが速いような気がします。また、WorksheetFunction.(関数)は、エラートラップを使うので、比較的、コードが難しいものになるはずです。変数を空にするなどのコードに注意が必要です。 なお、ExcelのVBA内で使用する場合は、Application.WorksheetFunction のApplication(=Excel)は分かっていますので、省略して、WorksheetFunction.(関数)で済むことになっています。 >WorksheetFunctionを使う場合は、 >フルのApplication.WorksheetFunction.Findを使った方が良いのでしょうか? 通常、Excel VBAでは、WorksheetFunction.Findで良いと思います。 >Find("b", "abc") こちらは、VBA関数を探しますので、使い方が違います。
お礼
ありがとうございます。