(結論はこちら)
パソコン同好会で使っている「よくわかる Microsoft Office Excel演習問題集」の Lesson36 に「カレンダー」がある。「インストラクターのネタ帳」にも、年度末のこの時期、結構なアクセスがある らしい。
因みに、「Excel演習問題集Lesson36「カレンダー」の補完」のアクセス件数を調べてみた。
一週間後に迫った来年度、当区の自治会会長をすることになったが、途端に入ってきた業務が「集会所の予約」管理。j留守にすることが多い(アウトドア志向のため)k無携帯電話。で、上述のカレンダーのことがあったので、「実務に役立つカレンダー」作りに挑戦、自宅のどのパソコンからでも見られるようにしよう...
Lesson36「カレンダー」は、予定は印刷して書き込む 方式である。例えば、パソコン同好会のように、「毎週○曜日の○時から使いたい」と言われると‥‥
そこでマクロを作成し、このような事態に対応出来るようなカレンダーの挑戦! の、第一歩でつまづいた。
VBAでワークシート関数を使うには
Excel2003のヘルプより
Visual Basic でワークシート関数を使用する
Visual Basic ステートメントでは、ほとんどのワークシート関数を使用できます。使用できるワークシート関数の一覧を表示するには、ここをクリックしてください。
Visual Basic からワークシート関数を呼び出す
Visual Basic では、WorksheetFunction オブジェクトを介して Excel ワークシート関数を使用できます。
次の Sub プロシージャは、Min ワークシート関数を使用してセル範囲の最小値を決定します。最初に、変数 myRange を Range オブジェクトとして宣言します。次に、この変数にシート 1 のセル範囲 A1:C10 を設定します。別の変数 answer には変数 myRange に Min 関数を適用した結果を割り当てます。最後に、変数 answer の値をメッセージ ボックスに表示します。
Sub UseFunction() Dim myRange As Range Set myRange = Worksheets("Sheet1").Range("A1:C10") answer = Application.WorksheetFunction.Min(myRange) MsgBox answer End Sub
引数として範囲参照を必要とするワークシート関数を使用する場合、Range オブジェクトを指定する必要があります。たとえば、Match ワークシート関数を使用してセル範囲を検索できます。ワークシート セルには、=MATCH(9,A1:A10,0) などの数式を入力します。しかし、Visual Basic プロシージャでは、Range オブジェクトを指定することにより、同じ結果が得られます。
Sub FindFirst() myVar = Application.WorksheetFunction _ .Match(9, Worksheets(1).Range("A1:A10"), 0) MsgBox myVar End Sub
使いたかったのは VLookup 関数。上記ヘルプを真似て次のようにコーディングした。
strAns = Application.WorksheetFunction _ .VLookup(datDate, Worksheets("予約").Range("A2:D366"), 4, False)
実行すると、「実行時エラー'1004' / WorksheetFunctionクラスのVLookupプロパティを取得できません」
そう言われても、私も困るんです...
ググっていると、
そのエラーは見つからなかったときに出るものです。閃いてエラートラップしたが、「検索されてもいいはずなのに出来ない」状態が続く...
でも、見つからない可能性はあるわけですから、通常はそれを考慮したコードを書くものなのですよ ‥‥