- 締切済み
excelの集計で対照となる列の値となる行を削除をするマクロ
excelの集計で入力した日付を入れているのですが、○月○日から△月△日までのデータ行を削除できるマクロができないで困っています。 ユーザーフォームを読み出して、該当する日付が入力されている行を一括で削除できればと考えています。 仕事の効率化には必ず必要です。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。Wendy02です。 補足ですが、#1 のコードは、Excel 97 以上のオールバージョン用で、かなり変則的なコードです。 下位バージョン(Excel97など)には、日付検索が出来ない時があるという、独特のバグが存在するからです。 以下は、以下は、Excel2002以降の、たぶん、ノーマルなコードです。 なお、仮に、1列目ということで、検索対象は、Columns(1) となっております。 'Excel2002以降 Dim r1 As Range Dim r2 As Range Dim Kaisi As String Dim Owari As String Kaisi = "5/1" 'セルの書式にあわせる Owari = "5/10" ' "" Set r1 = ActiveSheet.Columns(1).Find(Kaisi, LookIn:=xlValues) If Not r1 Is Nothing Then Set r2 = ActiveSheet.Columns(1).Find(Owari, LookIn:=xlValues, _ SearchDirection:=xlPrevious) If Not r2 Is Nothing Then Range(r1, r2).EntireRow.Delete End If End If Set r1 = Nothing: Set r2 = Nothing
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 本来は詳しく書いていただけると良いのですが。何につまずいているのか良く分かりません。出来れば、その状況を書いていただいたほうが、回答者側の無駄が少なくてすみます。 以下の場合は、シリアル値で探しています。Find メソッドでは、場合によっては外れてしまう可能性があります。ただし、これは、同じものがないという条件の下で作られています。 同じものがある場合は、j の変数側を j = WorksheetFunction.Match(CLng(Owari), Columns(1).Cells, 1) とします。 Dim i As Long Dim j As Long Dim Kaisi As Date Dim Owari As Date Kaisi = #4/1/2006# '←TextBox で持ってくる場合は、CDateで変換します。 Owari = #5/1/2006# ' "" '初期値 i = 0: j = 0 On Error Resume Next i = WorksheetFunction.Match(CLng(Kaisi), Columns(1).Cells, 0) j = WorksheetFunction.Match(CLng(Owari), Columns(1).Cells, 0) On Error GoTo 0 If i > 0 And j > 0 Then Range(Cells(i, 1), Cells(j, 1)).EntireRow.Delete End If
お礼
早速ご返答いだだきましてありがとうございます! 早速試してみたいと思います。
お礼
Wendy02さん 大変遅くなりまして、申し訳ありませんでした。 先ほど試してみたところ、ばっちり削除されました! あとは、開始と終わりの日付をユーザーフォームで代入すればいいと思うのですが、初心者なものでマクロに日付を代入する方法が分かりません。 よろしければ、そちらの方もお教えいただければと思います。 よろしくお願いいたします。 今回お教えいただいたマクロは少しづつ理解して確実に覚えたいと思います。