■タスク管理 -日付の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
コメント