Sheet1のA列に(A1からA365)に2005/4/1から1年間の日付があります。で、H5に今日の日付をいれます。で、I5にmatch(H5,A1:A65,0)といれると、きちんと値が戻ってきます。が、これをVBAで
Sub test()
mydate = range("H5").value
myrow = Application.WorksheetFunction.Match(mydate, Range("A1:A365"), 0)
End Sub
とすると、アプリケーション定義またはオブジェクト定義のエラーです。
と表示され、できません。
同じ事をしていると思うんですが、違いが分かりません。教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>mydate = range("H5").value


mydate に、自動キャストしてはダメっていうことです。
mydate に、日付を入れると、Date 型になって、Match 関数の引数として受け入れてくれません。

簡単な処理としては、
やっぱり、基本的に、変数の型を宣言して、

Dim mydate As Long
としてください。
( = Clng(Range("H5").Value) という方法がないわけではありません。)

ただ、myrow が、エラーを抱えると、今度は、実行時エラーになりますから、On Error Resume にするか、Application.Match(... としてください。

私は、このような場合は、Application.Match にして、その戻り値の型を、Variant 型にし、戻り値が、エラーでない限り、実行するようにしています。

例:
If Not IsError(myrow) then
'実行...

Error トラップよりも便利です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング