• ベストアンサー

日付について

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 とすると、アプリケーション定義またはオブジェクト定義のエラーです。 と表示され、できません。 同じ事をしていると思うんですが、違いが分かりません。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 トラップよりも便利です。

関連するQ&A