• ベストアンサー

エクセルのマクロのことです。

以前、下記のような回答をいただきました。 この場合条件をメッセージボックスに入力するようにして頂いているのですが、これをデータがシート1にある場合、シート2のA1とB1のセルに条件を入力するようにしたいのですが、どう変えればいいのかわかりません。 どなたかお願いします。 以前頂いた回答↓ 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 以前頂いた回答↑ ちなみにやりたいことは、シート1にA列=氏名、B列=誕生日というリストが あるとして、シート2のA1とB1に入力した期間内をマクロを登録したボタンで抽出する。というようなことです。 初心者なのですが、仕事で必要になってしまい困っています。 エクセルは2000を使用しております。宜しくお願いいたします。

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

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

こんにちは。 私が書いたやつですね。 シート名がSheet1かSheet2の場合です。 Sub DateIn3() Dim startDate, endDate On Error GoTo ER:  startDate = DateChange(Worksheets("Sheet2").Range("A1"))  endDate = DateChange(Worksheets("Sheet2").Range("B1"))  Worksheets("Sheet1").UsedRange.AutoFilter  Worksheets("Sheet1").UsedRange.AutoFilter Field:=2, Criteria1:=">=" & startDate, _            Operator:=xlAnd, Criteria2:="<=" & endDate 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
質問者

お礼

!以前回答いただいた方ですね! ありがとうございます。 そして、何度もすみません。 出来ました。 ほんとにありがとうございました。

その他の回答 (2)

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.3

#1です。記述ミスをしてしまいました。下記のコードをコピー&ペーストして下さい。ツールバーボタンにマクロを登録する方法はご存知であることを前提に説明を割愛させていただきます。もしお解りにならない時は、お気軽にお知らせ下さい。詳しく説明させていただきます。 Sub DateIn2() Dim startDate, endDate On Error GoTo ER: With Worksheets(1) .UsedRange.AutoFilter startDate = DateChange(Worksheets(2).Range("A1").Value) endDate = DateChange(Worksheets(2).Range("B1")) .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
質問者

お礼

回答ありがとうございます。 できました。 わかりずらい質問にもかかわらず、的確な回答をいただけて 本当に感謝しております。 ありがとうございました。

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.1

はじめまして。下記の様に変更すれば、貴方様の思い通りの動作をすると思います。 下記のコードをThisWorkbookのモジュールシートにコピー&ペーストしてみて下さい。 Sub DateIn2() Const myMsg = "西暦で指定(例)2002/11/1" Dim startDate, endDate On Error GoTo ER: With Worksheets(1) .UsedRange.AutoFilter startDate = DateChange(Worksheets(2).Range("A1").Value) endDate = DateChange(Worksheets(2).Range("B1")) .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 不具合・ご不明な点等がございましたら、お気軽にお知らせ下さい。

関連するQ&A