- ベストアンサー
エクセルの関数(マクロ?)
エクセルでシートにデータが入ってますが、 このデータの内、条件を満たす((例)>04/03/31) ものだけを、別のシートに自動的にコピーしたいのですが、どうすればいいのでしょうか? 説明が分かりづらいかと思いますが、 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ツール-マクロ-VBE-挿入-標準モジュールに下記を貼りつけ。 Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet '----A Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '-----B d = sh1.Range("A2").CurrentRegion.Rows.Count ' MsgBox d j = 2 '----- sh1.Activate dt = Application.InputBox("日付2004/2/12") dt2 = Split(dt, "/") dt3 = DateSerial(dt2(0), dt2(1), dt2(2)) For i = 2 To 1 + d 'If sh1.Cells(i, "A") > #3/31/2004# Then If sh1.Cells(i, "A") > dt3 Then '-----C sh2.Cells(j, "A") = sh1.Cells(i, "A") sh2.Cells(j, "B") = sh1.Cells(i, "B") sh2.Cells(j, "C") = sh1.Cells(i, "C") j = j + 1 End If Next i End Sub (自分にあわせて修正点) (上記コードのAの部分) Sheet1、Sheet2の部分を自分のシート名に 変える (B) 表の始まる行を2としてますが、実情に合わせて変える。 For i = 2 To 1 + d の部分もそれに合わせて変える。 (C) 項目数に合わせて増減して、記述行を増減してください。 シート1のD列をシート2のA列にもってくるなら sh2.Cells(j, "A") = sh1.Cells(i, "D") (その他) 'If sh1.Cells(i, "A") > #3/31/2004# Then 日付が決まっている時の記述例です。 そちらの先頭の’を取り去るとそちらが有効になり、代わりにIf sh1.Cells(i, "A") > dt3 Thenの先頭に’をいれて'If sh1.Cells(i, "A") > dt3 Thenにしてください。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#2の補足について。 >日付が入っていないもの(空白のセル)だけを 選ぶ場合はどうすればいいですか? Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet '----A Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '-----B d = sh1.Range("A2").CurrentRegion.Rows.Count j = 2 '----- sh1.Activate For i = 2 To 1 + d If sh1.Cells(i, "A") = "" Then 'ここを変更した '-----C sh2.Cells(j, "A") = sh1.Cells(i, "A") sh2.Cells(j, "B") = sh1.Cells(i, "B") sh2.Cells(j, "C") = sh1.Cells(i, "C") j = j + 1 End If Next i End Sub でどうでしょう。やって見てください。 (自分のケースにあわせて修正点)は同じく注意して修正してください。
お礼
ありがとうございます!! 無事に完成しました。
- reply
- ベストアンサー率16% (34/204)
if条件分を使って、条件にあっていたら、その値、それ以外は""(空白)を出力するようにすればよいと思います。
補足
詳しく教えていただき、有難うございます。 上記のマクロは必死ながらも、なんとか組めました。 それで、あつかましいんですが、 質問では日付を3/31で指定したんですが、 日付が入っていないもの(空白のセル)だけを 選ぶ場合はどうすればいいですか? 申し訳ないですが、お願いします。