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")ではコンパイルエラーになりました。
- ベストアンサー
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") はコンパイルエラーになりました。
- AADFUYFXCWE
- お礼率100% (27/27)
- オフィス系ソフト
- 回答数1
- ありがとう数4
- みんなの回答 (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関数を探しますので、使い方が違います。
関連する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
- ベストアンサー
- Visual Basic
- 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)」というコンパイルエラーになりました。
- ベストアンサー
- Visual Basic
- 「ぺ」って何?
エクセル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 をしても絶対に¥が返ってくるのですが、 パソコンのパスセパレーターが¥じゃない人もいるのですか?
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。