|
(補足2)
今回はある期間内の日付データの抽出ということで、一般機能のFilterを
使いましたが、単一の日付のときなら .Findメソッドが適当かというと、
Findメソッドで日付の検索はやらないほうがいいです。
なぜかというと、日付データのセルには「2010/1/6」のような「日付け型」
の値とともに、内部で計算するために「40512」というシリアル値も
格納されています。
Matchワークシート関数を使うと、セルの「40512」のようなシリアル値を
検索してくれます。
Findを使ったばあいは、シリアル値でなく「日付」を検索しようとします。
Findを使った日付の検索がよく失敗するのは、Findが文字列の検索をする
からです。日付の検索でも、セルの表示形式で検索値を文字列にして
検索しないとまずヒットしません。
ただ、Match関数だと検索範囲の先頭セルから検索していちばん最初に
マッチしたセルの位置を見つけてそれで終わり、です。なので、ある
範囲の中から同じ日付を複数個見つけようとするときは、
Find と FindNext のDo〜Loop でなく、フィルタを使ってください。
今回使ったAdvancedFilter でもいいし、AutoFilter でもいいです。
書き方は 以下の通り
(↓例は 2014/3/1 〜 2014/3/20 までの期間内データを抽出するばあい)
範囲.AutoFilter 1, ">=" & CDate("2014/3/1"), xlAnd, _
"<=" & CDate("2014/3/20")
(↓例は 2014/3/1 のレコードだけを抽出するばあい)
範囲.AutoFilter 1, ">=" & CDate("2014/3/1"), xlAnd, _
"<=" & CDate("2014/3/1")
一日だけでも、不等号を使い、「以上」「以下」と指定してやるのが、
ポイントです。一日だけだからといって、
範囲.AutoFilter 1, CDate("2014/3/1")
とすると、失敗します。(たぶんFindのように文字列として検索する
からと思われます)
|
|