excel - 比较 3 个日期
问题描述
我想添加一些 VBA 代码来比较 3 列中的日期并将最大(最近)日期输出到我的工作表中。
我目前有代码来比较我定义为变量的 2 个日期列并将值返回到工作表,但是我需要一些帮助来了解如何比较 3 个日期列,第三个日期列将是:
PPD_3_Date = Worksheets("Data").Range("AS" & i)
这是我目前正在使用的功能:
Function PPDdate()
Dim PPD_1_Date As Date
Dim PPD_2_Date As Date
Dim i As Long, j As Long, k As Long
j = Worksheets("PPDCI").Range("A" & Rows.Count).End(xlUp).Row + 1
k = Worksheets("Error").Range("A" & Rows.Count).End(xlUp).Row + 1
For i = 2 To lstrow
PPD_1_Date = Worksheets("Data").Range("AW" & i)
PPD_2_Date = Worksheets("Data").Range("BA" & i)
Entity = Worksheets("Data").Range("J" & i)
Dept = Worksheets("Data").Range("M" & i)
TSpot_Date = Worksheets("Data").Range("AS" & i)
If PPD_1_Date > PPD_2_Date Then
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = PPD_1_Date
Worksheets("PPDCI").Range("G" & j).Value = Worksheets("Data").Range("AX" & i).Value
Worksheets("PPDCI").Range("H" & j).Value = Worksheets("Data").Range("AZ" & i).Value
Worksheets("PPDCI").Range("I" & j).Value = Worksheets("Data").Range("AY" & i).Value
j = j + 1
Else
If PPD_1_Date < PPD_2_Date Then
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = PPD_2_Date
'Worksheets("PPDCI").Range("G" & j).Value = "ELSE IF CONDITION"
Worksheets("PPDCI").Range("G" & j).Value = Worksheets("Data").Range("BB" & i).Value
Worksheets("PPDCI").Range("H" & j).Value = Worksheets("Data").Range("BD" & i).Value
Worksheets("PPDCI").Range("I" & j).Value = Worksheets("Data").Range("BC" & i).Value
j = j + 1
Else
'If IsEmpty(Worksheets("Data").Range(PPD_1_Date & i).Value) = True And IsEmpty(Worksheets("Data").Range(PPD_2_Date & i).Value) = True Then
'GoTo EmptyRange
'Else
If (InStr(1, Entity, "CNG Hospital") Or InStr(1, Entity, "Home Health") Or InStr(1, Entity, "Hospice") Or InStr(1, Dept, "Volunteers")) And IsEmpty(TSpot_Date) = True Then
Worksheets("Error").Range("A" & k & ":H" & k).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("Error").Range("F" & k).Value = "REVIEW PPD DATA"
k = k + 1
Else
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("A" & i & ":C" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = TSpot_Date
Worksheets("PPDCI").Range("G" & j).Value = Worksheets("Data").Range("AX" & i).Value
Worksheets("PPDCI").Range("H" & j).Value = Worksheets("Data").Range("AY" & i).Value
Worksheets("PPDCI").Range("I" & j).Value = "NO PPD DATES BUT HAS TSPOT DATE"
j = j + 1
End If
End If
End If
Next i
End Function
这是在 Office 365 客户端上运行的。提前致谢。
解决方案
已经有一个用于查找范围内最大日期的功能,Application.WorksheetFunction.Max
:
只需输入包含日期的范围,或日期本身,它就会吐出最大的一个。
要“比较 3 列中的日期并将最大(最近)日期输出到我的工作表中”,假设您的日期存储在PPData1-3
Sub PPDDate()
Dim PPD_1_Date As Date
Dim PPD_2_Date As Date
Dim PPD_3_Date As Date
PPD_1_Date = Sheet1.Range("A2")
PPD_2_Date = Sheet1.Range("B2")
PPD_3_Date = Sheet1.Range("C2")
Sheet1.Range("A1") = Application.WorksheetFunction.Max(PPD_1_Date, PPD_2_Date, PPD_3_Date)
Sheet1.Range("A1").NumberFormat = "dd.mm.yyyy"
End Sub
或者简单地将公式直接放入要打印最大的单元格中,如屏幕截图所示。
如果您想根据哪个日期最大来做各种事情,我可能会执行以下操作:
Option Explicit
Sub PPDDate()
Dim PPD_1_Date As Date
Dim PPD_2_Date As Date
Dim PPD_3_Date As Date
Dim largest_date As Date
PPD_1_Date = Sheet1.Range("A2")
PPD_2_Date = Sheet1.Range("B2")
PPD_3_Date = Sheet1.Range("C2")
Select Case Application.WorksheetFunction.Max(PPD_1_Date, PPD_2_Date, PPD_3_Date)
Case PPD_1_Date:
' Do stuff for case 1
Debug.Print "1"
Case PPD_2_Date:
' Do stuff for case 2
Debug.Print "2"
Case PPD_3_Date:
' Do stuff for case 3
Debug.Print "3"
Case Else:
MsgBox Prompt:="Something went wrong", Title:="Something went wrong", Buttons:=vbExclamation
End Select
End Sub
如果两个日期相等,我相信这是将执行的第一个案例 - 如果这很重要,您可能需要稍微改变一下。
推荐阅读
- c# - 将 ComboboxItem 作为复选框绑定到它在列表中的存在?
- javascript - 如何更改 Mapbox Geocoder 搜索栏的大小?
- html - 在ios safari上定位固定元素?
- python - Scrapy:无法创建项目
- javascript - clearInterval 执行后刷新页面
- kotlin - BufferedImage drawString 损坏的字母
- c# - 从 C# 中的 .txt 文件中的单行获取多个子字符串
- amazon-web-services - AWS LastModified S3 存储桶不同
- ios - 使用 firebase 和 swift 合并用户消息
- chromium - 更改主题颜色元属性在 Chromium 中无效