Access2000VBA・Excel2000VBA独学~VBAで、「Application.WorksheetFunction」プロパティ(WorksheetFunctionオブジェクト)に含まれていないワークシート関数を実行する方法~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
★ はじめに
「Application.WorksheetFunctionプロパティ(=WorksheetFunctionオブジェクト)に含まれていないワークシート関数」を、どうしても使いたい場合がないわけでもないそうです。
たとえばVBA関数では「やれない」処理が、ワークシート関数でならできる場合、などだそうです。
結果から言うと、「Application.Evaluate」メソッドを使えばいいらしいのですが、詳しくは
↓こちらのWebページをご参考にしてください。
参考:『便利だからと言って….』
あとはヘルプの以下の項目もご参考に。
1:Application.Evaluate メソッド
2:Chart.Evaluate メソッド(上記の「便利だからといって」のことが書かれています。
3:Worksheet.Evaluate メソッド
(こちらも上記の「便利だからといって」のことが書かれています。
★ 例えば「IF」関数を数式で使う場合
(VBA内で使うと赤くエラーになる。イミディエイトではエラー。)
1 2 3 4 5 |
' ' IF("2019/01/01"*1 < TODAY(),"True","False") ' ' |
※ "2019/01/01" といったように、日付を"" で囲むと、(数式内では)基本的には文字列として判断されてしまいますが、「*1」したり「+0」したりすると、Excelは "" で囲まれた日付を「正く日付データとして」計算してくれるそうです。
参考:『エクセル関数の技:日付データの処理に関する技』
★ 前項と同じ数式をVBAで使う場合(イミディエイトでも使えます。特に以下の上の行の例)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' ' Range("A1") = Application.Evaluate("IF(""2019/01/01""*1 < TODAY(),""True"",""False"")") Range("A1") = Application.Evaluate("IF(2019/01/01*1 < TODAY(),True,False)") 何らかの変数 = Application.Evaluate("IF(""2019/01/01""*1 < TODAY(),""True"",""False"")") 何らかの変数 = Application.Evaluate("IF(2019/01/01*1 < TODAY(),True,False)") ' ' |
※「 Application.Evaluateメソッド 」を使うと、「WorksheetFunctionオブジェクトに含まれていないワークシート関数」をVBA内で実行することができるそうです。
セルの数式の内容をそのまま使えばいいのですが、ただ、数式全体を (" ") で囲まないといけないそうなので、もし数式内で使っている場合は、次のように書きます。
(01)「"」を「テキストを囲む」という意味で使っている場合
さらにその文字列の部分を「" "」で囲めばいいようです。
1 2 3 4 5 6 7 8 9 |
' Sub test101() Debug.Print Application.Evaluate("IF(""2019/01/01""*1 < TODAY(),""True"",""False"")") 'あるいは、 Debug.Print Application.Evaluate("IF(2019/01/01*1 < TODAY(),True,False)") 'あるいは、 Debug.Print Application.Evaluate("IF(""2019/01/01""*1 < TODAY(),True,False)") End Sub ' |
実行結果は以下のようになります。
True
(02)『(" ")で囲まれた文字列 』の中で、さらにその中の文字の一部として、「” 」という文字を使いたい場合
「"」と表示したいその部分だけ「"」を4つ使います。
1 2 3 4 5 |
' Sub test101() Debug.Print Application.Evaluate("CONCATENATE(""aa""""aaa"",""いいいい"",""uuuu"")") ' End Sub |
実行結果は以下のようになります。
aa"aaaいいいいuuuu
※詳しくは以下のWebサイトもご参照下さい。
ダブルコーテーションの表示