• ベストアンサー

エクセルのマクロで・・・?

エクセルの表で、日付の列を検索したいのですが・・・。 例えば A列に名前 B列に誕生日があるとして、ある期間の誕生日の人を検索したい。とします。 普通にやるならデータ→フィルタ→オートフィルタ→条件をいれて・・・・。となると思うんですが、これをボタン一つで、できるようにしたいんです。 さらに、条件は特定のセルに調べたい期間を入力するようにしたいのです。 エクセルは2000です。 わかりにくい説明で申し訳ないのですが、宜しくお願いします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

再びこんにちは。 ↓これに近い現象のようですね。 http://support.microsoft.com/default.aspx?scid=kb;ja;JP416875 DateValueは短い日付を使うのでYMDをMDYで認識しているのでしょうか? こちらはExcel97なので、同様の現象は起こりません。 苦肉の策です。 Excel97では動作しましたが、2000だと解かりません。 Sub DateIn2() Const myMsg = "西暦で指定(例)2002/11/1" Dim startDate, endDate On Error GoTo ER: With ActiveSheet  .UsedRange.AutoFilter   startDate = DateChange _    (Application.InputBox(myMsg, "開始日", Type:=2))   endDate = DateChange _    (Application.InputBox(myMsg, "終了日", Type:=2))   .UsedRange.AutoFilter Field:=2, Criteria1:=">=" & startDate, _    Operator:=xlAnd, Criteria2:="<=" & endDate End With ER: End Sub '--------------------------------------------------------- Function DateChange(myDate) As Variant Dim y, m, d  myDate = Format(myDate, "yyyy/mm/dd")   y = Left(myDate, 4)   m = Mid(myDate, 6, 2)   d = Right(myDate, 2)  myDate = Format(DateSerial(y, m, d), "##0")  DateChange = myDate End Function

noname#2643
質問者

お礼

再回答ありがとうございます。 できました。 とてもたすかりました。 本当にありがとうございました。

noname#2643
質問者

補足

ごめんなさい。 条件を入れるところを特定のセルに設定するにはどうしたらいいですか。 甘えっぱなしで、すみません。

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 サンプルです。 コピーブックなど、テスト環境で試して下さい。 Sub DateIn() Const myMsg = "西暦で指定(例)2002/11/1" Dim startDate, endDate On Error GoTo ER: With ActiveSheet  .UsedRange.AutoFilter   startDate = DateValue _    (Application.InputBox(myMsg, "開始日", Type:=2))   endDate = DateValue _    (Application.InputBox(myMsg, "終了日", Type:=2))   .UsedRange.AutoFilter Field:=2, Criteria1:=">=" & startDate, _    Operator:=xlAnd, Criteria2:="<=" & endDate End With ER: End Sub

noname#2643
質問者

補足

回答ありがとうございます。 マクロを実行するとフィルターはかかるんですが、上手く目的の期間が抽出されません。 期間を 開始日:2002/6/1 終了日:2002/6/25 としてやってみたんですが フィルターのオプションを見てみると条件が 2001/2/6 以上 2025/2/6 となっています。 お手数おかけしてすみません。追加でご回答をお願いいたします。

回答No.1

初めまして。サンプルマクロを組んでみました。参考にしてみて下さい。 ボタンの代わりにA1とB1をスイッチに使っています。例えば3月1日~5月31日までを抽出したければ、A1に3月1日・B1に5月31日と入力します。誕生日の入力方法と同じように入力して下さい。B1を抜けた時点で抽出された結果が表示されます。下記のコードをSheet1のモジュールシートにコピー&ペーストして下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myMon1 As String Dim myMon2 As String If Target.Address <> "$B$1" Then Exit Sub myMon1 = Range("A1").Value: myMon2 = Range("B1").Value Rows("2:2").AutoFilter Selection.AutoFilter field:=2, Criteria1:=">=" & myMon1, Operator:=xlAnd, Criteria2:="<=" & myMon2 End Sub ご不明な点・不具合等がございましたら、遠慮なくお知らせ下さい。

noname#2643
質問者

お礼

回答ありがとうございます。 さっそくやってみます。

関連するQ&A