この質問に続いて、別の範囲の値から範囲を定義します(Siddharthに感謝します)。コードを編集して、タスクを最も長い日数から最も短い日数の順にリストするようにします。Siddharthと簡単なコメントチャットを行い、一時シートを削除する前に、データを含む一時シートを作成し、到着したデータで並べ替えてメッセージボックスを作成するのが最善の方法であると提案しました。どこから始めればいいですか?msg文字列を新しいシートにエクスポートできますか、それともシートに格納するために他の変数である必要がありますか?
Option Explicit
Sub Notify()
Dim WS1 As Worksheet
Dim Chk As Range, FltrdRange As Range, aCell As Range
Dim ChkLRow As Long
Dim msg As String
On Error GoTo WhatWentWrong
Application.ScreenUpdating = False
Set WS1 = Sheets("Ongoing")
With WS1
ChkLRow = .Range("C" & Rows.Count).End(xlUp).Row
'~~> Set your relevant range here
Set Chk = .Range("A1:K" & ChkLRow)
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
With Chk
'~~> Filter,
.AutoFilter Field:=3, Criteria1:="NO"
'~~> Offset(to exclude headers)
Set FltrdRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible)
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
For Each aCell In FltrdRange
If aCell.Column = 8 And _
Len(Trim(.Range("B" & aCell.Row).Value)) <> 0 And _
Len(Trim(aCell.Value)) <> 0 Then
msg = msg & vbNewLine & _
"Request for contractor code " & .Range("B" & aCell.Row).Value & _
" dispensing month " & .Range("A" & aCell.Row).Value & _
" has been in the cupboard for " & _
DateDiff("d", aCell.Value, Date) & " days."
End If
Next
End With
End With
'~~> Show message
MsgBox msg
Reenter:
Application.ScreenUpdating = True
Exit Sub
WhatWentWrong:
MsgBox Err.Description
Resume Reenter
End Sub