[[20130917123327]] 『Applicationの付け方』(nobuhiko) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Applicationの付け方』(nobuhiko)

 お世話になります。
 いつもありがとうございます。

 解答の程、宜しくお願い致します。

 Match の場合、Application.Match としています。
 この場合は、エラーを判断できるとして、使用しています。

 m=Match(・・・・・ で始めれば、エラーが起きます。
 m=Application.Match(・・・・・ で始めれば、エラーが起きません。

 Replace の場合、

 s=Replace(・・・・・ で始めれば、エラーが起きません。
 s=Application.Replace(・・・・・ で始めれば、エラーが起きます。

 ですが、Trimは、どちらも処理してくれます。

 これは、どういう考え方をすれば、
 これから先、しっかりと書いていけるのでしょうか?

 どうか、宜しくお願い致します。


 ワークシート上で使える関数とVBAで使える関数を区別すること。

 Applicationを付けて使うのはワークシート上で使える関数をVBAで使う場合。

 MATCHはワークシート関数で、VBAには同じ名前の関数がないのでApplicationを付けないとエラーになる。

 Replace、Trimはワークシート関数にもVBAの関数にも同じ名前の関数があるがReplaceはワークシート関数とVBA関数では引数の位置や結果が違うので
 指定する引数が違っていればエラーがでる。
 (今回の場合はVBAのReplaceのつもりでワークシート関数のReplaceの引数指定をしたのだろう)

 Trim関数は引数は同じだが結果は違う。

 VBAのヘルプ・ワークシートのヘルプなどで各関数がどちらの関数で引数は何か、結果はどうなるかを調べること。

 追記
 ワークシート関数の全てがVBAで使えるわけではないので注意。
 (ヘルプに記載がある)
 (ねむねむ)

 ねむねむ様、ありがとうございました。

 もう一点だけご教示ください。

 >Replaceはワークシート関数とVBA関数では引数の位置や結果が違うので
 >指定する引数が違っていればエラーがでる。
 >(今回の場合はVBAのReplaceのつもりでワークシート関数のReplaceの引数指定をしたのだろう)

 これなのですが、

 Function Replace_e()
 On Error GoTo ERR1
 Dim s1 As String

 s1 = "999 999"
 s1 = Application.Replace(s1, " ", "")

 Replace_e = True
 Exit Function
 ERR1:
 Replace_e = False
 End Function

 VBA関数におけるTESTで、これはあっていますか?

 すみません。宜しくお願い致します。


 Application.ReplaceのReplaceはワークシート関数のReplace関数なのだからワークシートの(VBAでははない)ヘルプで引数を確認。

 >REPLACE(文字列,開始位置,文字数,置換文字列)

 >文字列
 >置き換えを行う文字列を指定します。

 >開始位置
 >置換文字列と置き換える先頭文字の位置 (文字番号) を数値で指定します。
 >文字列の先頭文字の位置が 1 になります。
 >文字数
 >置換文字列と置き換える文字列の文字数を指定します。
 >置換文字列
 >文字列の一部と置き換える文字列を指定します。

 それこそ" "を""に置き換えたいのであればVBA関数のReplace関数を使って
 Replace(s1, " ", "")
 で。

 なお、
 >この場合は、エラーを判断できるとして、使用しています。
 これは検索値がない場合に
 WorksheetFunction.Match
 では実行時エラーとなるのが
 Application.Match
 だとエラー値を返してくれるという事ではないのか? 
 (ねむねむ)


 ねむねむ様、
 頭が悪く本当に申し訳御座いません。

 >WorksheetFunction.Match
 >では実行時エラーとなるのが
 >Application.Match
 >だとエラー値を返してくれるという事ではないのか? 

 はい。そうです。言葉足らずで、すみません。

 ここまで来て、怒られそうで大変申し訳ないのですが、

 application. と worksheetfunction. は、同じだけれども、

 実行時エラーとなるか、ならないかの違いなのでしょうか?

 本当に愚問ですみません。

 宜しくお願い致します。

 (nobuhiko)すみません。名前を書くのを忘れていました。


 WorksheetFunction形式はExcel97で追加されたもので95以前はApplication形式を使っていた。

 で、Application形式時には返り値にエラーを返していたのがWorksheetFunction形式では実行時エラーになるようになった。

 なお、Application形式はExcel95以前と互換性を保つために残されている。
 (ねむねむ)

 ねむねむ様、本当に有難うございます。
 私にとっては、とてもとても貴重なお言葉でした。
 歴史なのですね。
 やはり、長くやっている方がすごいのですね。
 これからも、自分なりに精進してまいります。

 本当に有難うございました!

 (nobuhiko)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.