2017-12-11 13 views
1

Excelの自動削除機能を設定して、日付が経過するとセルが消去されるようにしようとしています。私のワークシートでは、最初の行で作業するコードを取得できますが、B2の後にB列に入力されたすべての日付をカバーするように範囲を拡張するためのアドバイスが必要です。VBAを使用したオートクリア機能

ワークシートには、日付が経過するとクリアする必要のある8列のデータがあります。

私が現在使用しているコードは、日付が>セルの値であればBは、その後チェックこのLASTROWにB2からループの列の最後に使用されたセルを見つけたところ、これを試してみてください

Private Sub Worksheet_Activate() 

If Date > Range("B2").Value Then 
    Range("B2:H2").ClearContents 
End If 

End Sub 
+0

日付を含むセルのみ?セルは日付として書式設定されていますか?あなたのコードごとに内容をクリアすることを意味しますか? – QHarr

+0

列Bのすべての行は日付で、日付として書式設定されています。列C〜Hの他のすべてのデータは、追加情報(例:名前、電子メールアドレス、電話番号)です。 – Johnn

+0

申し訳ありません。 – Johnn

答えて

1

です。 unionを使用して過去の範囲を収集し、それらを変数clearRangeに格納します。最後に、clearRangeが何もない場合、つまり過去に見つかった日付がある場合は、コンテンツを一度にクリアします。

Private Sub Worksheet_Activate() 

Dim lastRow As Long 

lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "B").End(xlUp).Row 

Dim loopRange As Range 
Dim clearRange As Range 

Set loopRange = ActiveSheet.Range("B2:B" & lastRow) 

Dim currCell As Range 

For Each currCell In loopRange 

    If Date > currCell.Value2 Then 

     If Not clearRange Is Nothing Then 

      Set clearRange = Union(clearRange, currCell.Resize(, 7)) 

     Else 

      Set clearRange = currCell.Resize(, 7) 

     End If 

    End If 

Next currCell 

If Not clearRange Is Nothing Then clearRange.ClearContents 

End Sub 
+0

私は書くだろう正確なコードのように見える;) –

+0

@シャイラド私は例で学んだと言うことをしよう! – QHarr

+0

これはすばらしく、B列の期限切れの日付はすべてクリアされます。ありがとうございました。 – Johnn