【Excel VBA】タスク管理 -日付のFrom To 判定-

■タスク管理 -日付のFrom To 判定-

以下の図の通り、「タスク一覧」シートのタスクリストから
今日日付を基準(★)として、「今日のタスク」シートにタスクリストを反映させる。

(★)判定基準は以下の通り
①今日日付が「タスク一覧」シートの「開始」列の値以上
かつ
②今日日付が「タスク一覧」シートの「期限」列の値以下

▼「タスク一覧」シート

▼「今日のタスク」シート

※なお、本処理は2021/4/29に実行したもの

フロー図:

サンプルコード:

' シート名の定数
Private Const SHEETNAME_TODAYTASK   As String = "今日のタスク"
Private Const SHEETNAME_TASKLIST    As String = "タスク一覧"

'シート関係の定数
Private Const STARTROW      As Integer = 2      ' 処理開始行
Private Const NUMBERCOL     As Integer = 1      ' 「No.」列
Private Const STARTDAYCOL   As Integer = 2      ' 「開始」列
Private Const ENDDAYCOL     As Integer = 3      ' 「期限」列
Private Const TASKCOL       As Integer = 4      ' 「タスク」列


Public Sub SelectTodayTask()
    ' 変数宣言
    Dim ShtNameTodayTask     As Worksheet    ' 「今日のタスク」ワークシート格納変数
    Dim ShtNameTaskList      As Worksheet    ' 「タスク一覧」ワークシート格納変数
    Dim looprow_tasklist     As Integer      ' タスク一覧用処理開始行
    Dim looprow_todaytask    As Integer      ' 今日のタスク用処理開始行
    Dim looprow_syokika      As Integer      ' 初期化用処理開始行
    Dim number_counter       As Integer      ' 出力用No.格納変数
    Dim today_value          As Date         ' 今日の日付をセットする変数

' 例外処理をセット
On Error GoTo SelectTodayTask_Error

    ' シート名を変数に格納
    Set ShtNameTodayTask = Sheets(SHEETNAME_TODAYTASK)
    Set ShtNameTaskList = Sheets(SHEETNAME_TASKLIST)

    ' 処理開始行を変数に格納
    looprow_todaytask = STARTROW
    looprow_tasklist = STARTROW
    looprow_syokika = STARTROW
    
    ' 出力用No.格納変数に初期値を格納
    number_counter = 1
    
    ' 今日の日付をセット
    today_value = Date
      
    
    ' 「今日のタスク」シートにフォーカス
    With ShtNameTodayTask
        ' 「今日のタスク」シートの初期化
        Do While .Cells(looprow_syokika, NUMBERCOL).Value <> ""
            .Cells(looprow_syokika, NUMBERCOL).Value = ""
            .Cells(looprow_syokika, STARTDAYCOL).Value = ""
            .Cells(looprow_syokika, ENDDAYCOL).Value = ""
            .Cells(looprow_syokika, TASKCOL).Value = ""
            
            ' インクリメント(初期化用カウンタ)
            looprow_syokika = looprow_syokika + 1
            
        Loop
        
    End With
    
    ' 「タスク一覧」シートにフォーカス
    With ShtNameTaskList
        ' 「タスク一覧」シートをループ処理
        Do While .Cells(looprow_tasklist, NUMBERCOL).Value <> ""
            
            ' 今日日付が「タスク一覧」シートの「開始」列の値以上
            ' かつ、今日日付が「タスク一覧」シートの「期限」列の値以下の場合、
            ' 「今日のタスク」シートに反映する
            If today_value >= .Cells(looprow_tasklist, STARTDAYCOL).Value _
                And today_value <= .Cells(looprow_tasklist, ENDDAYCOL).Value Then
                
                ' 「今日のタスク」シートの「No.」列に[出力用No.変数]を出力
                ShtNameTodayTask.Cells(looprow_todaytask, NUMBERCOL).Value _
                    = number_counter
                    
                ' 「今日のタスク」シートの「開始」列に「タスク一覧」シートの「開始」列の値を出力
                ShtNameTodayTask.Cells(looprow_todaytask, STARTDAYCOL).Value _
                    = .Cells(looprow_tasklist, STARTDAYCOL).Value
                
                ' 「今日のタスク」シートの「期限」列に「タスク一覧」シートの「期限」列の値を出力
                ShtNameTodayTask.Cells(looprow_todaytask, ENDDAYCOL).Value _
                    = .Cells(looprow_tasklist, ENDDAYCOL).Value
                
                ' 「今日のタスク」シートの「タスク」列に「タスク一覧」シートの「タスク」列の値を出力
                ShtNameTodayTask.Cells(looprow_todaytask, TASKCOL).Value _
                    = .Cells(looprow_tasklist, TASKCOL).Value
                
                ' インクリメント(No出力用カウンタ)
                number_counter = number_counter + 1
                
                ' インクリメント(「今日のタスク」シート処理行カウンタ)
                looprow_todaytask = looprow_todaytask + 1
            
            End If
        
            ' インクリメント(「タスク一覧処理」シート行カウンタ)
            looprow_tasklist = looprow_tasklist + 1
    
        Loop
    
    End With
    
    ' 終了処理へ移動
    GoTo SelectTodayTask_Exit

' 例外処理
SelectTodayTask_Error:
    
    MsgBox "エラーが発生しました"
    
    ' 終了処理へ移動
    GoTo SelectTodayTask_Exit
    
'  終了処理
SelectTodayTask_Exit:

    Set ShtNameTodayTask = Nothing
    Set ShtNameTaskList = Nothing

End Sub

コメント