dポイントプレゼントキャンペーン実施中!

EXCEL VBAで教えてください。 ユーザーフォームに開始日、終了日を入れ、コマンドボタンを押し、sheet1の開始日から終了日に該当するセルをコピーし、sheet2に貼り付けたいのですが、うまくいきません。
今は、メッセージボックスで範囲指定し、コピー&ペーストしているのですが、ユーザーフォームで開始日終了日を指定して、コピーしSheet2へ貼り付けたいのです。
--------------------
Sub 届()
Dim myPath As String
Dim myFName As String
Dim ファイル名 As String
Workbooks("処理.xls").Activate
Range("B10:K80").Select
Selection.ClearContents
myPath = ActiveWorkbook.Path
ChDir myPath
myFName = Dir("m.txt")
Dim データ形式 As Variant
Dim 区切りタブ As Variant
ファイル名 = "m.txt"
データ形式 = xlDelimited
区切りタブ = True
Workbooks.OpenText Filename:="m.txt", DataType:=xlDelimited, Tab:=True
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Columns("C:E").EntireColumn.AutoFit
Range("C2").Sort key1:=Columns("C"), Order1:=xlAscending, Header:= _
xlGuess
Worksheets.Add
Worksheets("m").Select
Dim moto As Range, saki As Range
On Error Resume Next
Set moto = Application.InputBox("どの範囲をコピーしますか?" & Chr(13) & "開始日、終了日を確認してください" & Chr(13) & "A列からE列まで選択してください", Type:=8)
If moto Is Nothing Then Exit Sub
If moto.Parent.Name <> "m" Then
MsgBox "m から選択してください"
Exit Sub
End If
Worksheets("Sheet1").Select
Set saki = Application.InputBox("どこに貼り付けますか?" & Chr(13) & "A4", Type:=8).Cells(1, 1)
If saki Is Nothing Then Exit Sub
If saki.Parent.Name <> "Sheet1" Then
MsgBox "Sheet1 から選択してください"
Exit Sub
End If
On Error GoTo 0
moto.Copy saki
ActiveWorkbook.SaveAs Filename:="届.xls", FileFormat:=xlWorkbookNormal
MsgBox "対象者をコピーしました"
End Sub
------------------
下記でやってみたのですがうまくいきません。
Private Sub CommandButton1_Click()
With Worksheets("sheet1")
開始日 = ">=" & TextBox1.Text
終了日 = "<=" & TextBox2.Text
ActiveSheet.Range("A1:N200").AutoFilter , Field:=3, _
Criteria1:=開始日, Operator:=xlAnd, _
Criteria2:=終了日
Unload UserForm1
End With
End Sub

A 回答 (2件)

コードを拝見しましたが


無駄なコードと、意味のなさそうなコードが多く
やりたいことが良く分からなかった
取り合えず、userformは
これで問題無いと思いますが
ただ、textboxの入力に注意が必要かも
対象の日付の入ったセルをクリックして
数式バーに表示される形式で入力しないと
ヒットしないかもしれません

Private Sub CommandButton1_Click()
Dim 開始日, 終了日
With Worksheets("sheet1")
開始日 = ">=" & TextBox1.Text
終了日 = "<=" & TextBox2.Text
.Range("A1:N200").AutoFilter
.Range("A1:N200").AutoFilter Field:=3, _
Criteria1:=開始日, Operator:=xlAnd, _
Criteria2:=終了日
Unload UserForm1
End With
End Sub


あと、やりたいことを
もう少し詳しく文章でも説明が欲しいです

参考まで
    • good
    • 0
この回答へのお礼

回答ありがとうございます。ユーザーフォームで思ったようにできました。
ユーザーフォームに、開始日、終了日、コマンドボタンを作成し実行するのがまだうまくいきません。
開始日と終了日にyyyy/mm/ddと入れても、mm/ddと入れてもヒットしてしまうのですがうまくいきません。
もう少しやってみてまた質問させていただきます。

お礼日時:2010/05/10 21:02

意欲的に新しい機能を試しておられて、すばらしいですね。



セルが整数値ではなく日付のときの AutoFilter の使い方の問題ですが

私もよく知らないのですが (^-^; 試した結果では
セルの表示と検索文字の表示をどちらも yyyy/mm/dd 形式
つまり 2010/5/11 ではなく、2010/05/10 とするとウマクいきました。

たぶんここで詰まったためにコピーするロジックまでは書いてありませんが
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …

は良かったです。
また、AutoFilter した後は
    WorkSheets("Sheet1").AutoFilterMode = False
などとしておいた方がスマートかとおもいます。

余談ですが、
Excel の InputBox ってオモシロイ機能があるのですね~ (^-^)
参考になりました。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2010/05/11 16:45

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