Geneは、特定の列の日付に基づいてワークシートからデータをすばやく削除する方法を探しています。日付が今日より古い(日付が過ぎている)場合は、行を削除する必要があります。

これは、マクロを使用してかなり簡単に実行できます。マクロでデータをステップ実行し、各行の日付を今日の日付と比較するだけです。日付が今日よりも小さい場合は、EntireRowオブジェクトでDeleteメソッドが使用されます。

Sub DeleteRows1()

Dim x As Long     Dim iCol As Integer

iCol = 7 'Filter all on Col G

For x = Cells(Cells.Rows.Count, iCol).End(xlUp).Row To 2 Step -1         If Cells(x, iCol).Value < Date Then             Cells(x, iCol).EntireRow.Delete         End If     Next End Sub

この例では、マクロは列G(iCol変数内)の日付をチェックします。日付が別の列にある場合は、変数を変更する必要があります。ワークシートのデータの行数によっては、マクロの実行にもかなりの時間がかかる場合があります。

パフォーマンスの低下に気付いた場合は、別のアプローチを使用することをお勧めします。次の例では、Excelのオートフィルター機能を使用して、最初にデータをフィルター処理して古いデータのみを表示し、次にそれらの行を削除します。

Sub DeleteRows2()

Dim Dates As Range     Dim nRows As Double     Dim currDate As Variant

'Format dates as text     Range("Dates").NumberFormat = "@"

'Today's date in number format     currDate = CDbl(Date)

Range("Dates").AutoFilter Field:=1, _       Criteria1:="<" & currDate     nRows = Range("Dates").Rows.Count     Rows("2:" & nRows).Select     Selection.Delete Shift:=xlUp     Range("Dates").AutoFilter     Range("Dates").NumberFormat = "m/d/yyyy"

Range("C2").Select End Sub

このマクロは、データ範囲に名前を割り当てる手順を実行したことを前提としています。データテーブル内のすべてのセル(見出し行を含む)を選択し、「日付」という名前を付けます。マクロを実行すると、この範囲がオートフィルターのターゲットとして使用されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3384)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。