WorksheetFunctionについて

このQ&Aのポイント
  • 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")ではコンパイルエラーになりました。
回答を見る
  • ベストアンサー

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") はコンパイルエラーになりました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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関数を探しますので、使い方が違います。

AADFUYFXCWE
質問者

お礼

ありがとうございます。

関連するQ&A

  • Phonetic[型が一致しません]になる理由

    Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic(Range("A1")) End Sub はうまくいくのに、 Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic("日本") End Sub ********************************************************* は、[型が一致しません]になるのはなぜでしょうか? オブジェクトブラウザを見ると、 Function Phonetic(Arg1 As Range) As String になってることから、rangeを指定しなくていけないからですか?

  • アプリケーションの横幅の値を取得したい vba

    アクセスのアプリケーションの横幅の値をvbaで取得する事は可能でしょうか? Sub サンプル() Debug.Print Application.Width End Sub はエラーになっちゃいました。

  • WorksheetFunctionオブジェクト

    VBAで以下のロジックを実行すると、 ”アプリケーションの定義またはオブジェクトのエラーです”というエラーが発生します。 何が悪いのでしょうか? Private Sub ComboBox1_Change() For i = 1 To 5  Sheets(1).Cells(i, 3) = Application.WorksheetFunction.VLookup(Cells(i, 1), Range(Cells(1, 4), Cells(3, 5)), 2) Next i End Sub

  • Randomizeがある時とない時の違いがわからな

    vbaです Sub Sample1() Randomize Debug.Print Int((6 - 1 + 1) * Rnd + 1) End Sub Sub Sample2() Debug.Print Int((6 - 1 + 1) * Rnd + 1) End Sub の違いがわからないのですが、 Randomizeはどのような役割をなしてるのでしょうか? Sample1の結果は、 5 3 3 4 3 1 6 5 3 4 で、 Sample2の結果は、 4 5 4 3 4 1 4 1 6 1 5 5 でした。

  • 引数 compareについて

    エクセルで Sub sample() Debug.Print InStr(1, "abcde", "C", vbTextCompare) End Sub このコードを実行する際、vbTextCompareはどういう役目を果たしてるのでしょうか? Sub sample() Debug.Print InStr(1, "abcde", "C") End Sub や Sub sample() Debug.Print InStr(1, "abcde", "C", vbBinaryCompare) End Sub にすると0が返りますが、 なぜ0が返るのかわかりません。 ヘルプを読むと、vbTextCompareは 「テキスト モードの比較を行います。」と書いてありますが、それがどういう意味なのか分かりません。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbDatabaseCompare) End Sub にすると、エクセルで実行しているからかエラーになりました。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbUseCompareOption) End Sub これだと、コンパイルエラーになりました。

  • アクセスでApplication.Caption

    アクセスでApplication.Captionに代わるコードはありますか? エクセルでなら Sub test01() Debug.Print Application.Caption End Sub は動きますが、アクセスだとコンパイルエラーになります。 CaptionがApplicationのメンバにないからだと思います。 いくつかのアプリケーションを跨いでVBAを動かしているのですが、 アクセスで自身のアプリケーション名、もしくはファイル名を取得するコードはありますか? ご回答よろしくお願いします。

  • 違いを教えてください。

    VBAについて質問です。 ///////////////////// Sub sample1(a As String) a = "abc" MsgBox a End Sub --------------------- Sub sample2() Dim a As String a = "abc" MsgBox a End Sub ///////////////////// sample1とsample2の違いは何でしょうか? どちらも標準モジュールに記載しました。 sample2はF5で実行できますが、sample1はF5を押しても何も起きません。 それだけの違いでしょうか? Sample1の使い道がわかりません。 ///////////////////// Option Explicit Sub sample2() Call sample1 End Sub --------------------- Sub sample1(a As String) a = "abc" MsgBox a End Sub ///////////////////// にしたら、 「引数は省略できません。(Error 449)」というコンパイルエラーになりました。

  • 「ぺ」って何?

    エクセルVBAなのですが、半角にできない文字があったのにで調べてみたのですが よくわかりません。 Sub a() Debug.Print StrConv("ぺ", vbNarrow) End Sub をしても半角になりません。 でも Sub b() Debug.Print StrConv("ペ", vbNarrow) End Sub なら半角になります。 Sub a1() Debug.Print Asc("ぺ") End Sub Sub b2() Debug.Print Asc("ペ") End Sub のように文字コードを調べてみたのですが -32040 -31879 が返りました。 半角にできないほうの-32040 は、なんなのでしょうか? カタカナではないのですか?

  • ifステートメント notと!は同じ意味ですか?

    VBAのifステートメントで、notと!は同じ意味ですか? 「a」で始まらない。 と言う意味で、下記のコードを作ったのですが、どちらも思い通りの結果が得られます。 If "あabc" Like "[!a-z]*" Then Debug.Print "OK" End If If Not "あabc" Like "[a-z]*" Then Debug.Print "OK" End If End Sub ネットからのサンプルをコピペしたので、いまいち理解できてないのですが notと!は同じ意味ですか?

  • PathSeparatorプロパティ

    PathSeparatorプロパティってどういうときに使うのでしょうか? Sub Sample() Debug.Print Application.PathSeparator End Sub をしても絶対に¥が返ってくるのですが、 パソコンのパスセパレーターが¥じゃない人もいるのですか?

専門家に質問してみよう