比较并获取最佳日期和相关字段

时间:2018-05-02 16:18:46

标签: vba excel-vba excel

我很高兴使用VBA for Excel并且需要开发一些代码来检索一个人最大的考试日期和相关字段(考试日期,考试检查日期,考试指示)并输出到另一个名为EXAMCI的标签。

由于日期输入文件的数据完整性问题,在某些情况下,考试日期(D列)将大于第二个考试日期(H列),反之亦然;当第二个考试日期(H栏)大于第一个考试日期(D栏)时会出现一些情况。

以下是文件中的一些示例数据(列是A - K,从左到右):

Userid  Employee Name   DOB             Exam Date       Exam Check Date Exam Induration Exam Negative   2nd Exam Date   2nd Exam Check Date 2nd Exam Induration 2nd Exam Negative
1234    John Smith      1/1/01          5/22/17         5/24/17         0               Yes             12/6/17         12/8/17             0                   Yes
6481    Jill Son        2/2/02          11/18/15        11/21/15        0               Yes             2/23/17         2/26/17             0                   Yes
3271    Cathy John      3/3/03          7/17/17         7/19/17         0               Yes             6/15/16         6/17/16             0                   Yes

在上面的示例数据中,您可以看到第一个考试日期大于John Smith和Cathy John的第二个考试日期,但是第二个考试日期大于Jill Son的第一个考试日期。

我希望程序做的是检查每一行,看看考试日期或第二个考试日期是否最大(两个),然后输出用户名,员工姓名,DOB和(考试日期,检查日期) ,和考试驯化)或(第二次考试日期,第二次考试检查日期和第二次考试指示) - 取决于哪个相关日期更大。

所以在示例John Smith和Jill Son中,我想在EXAMCI选项卡上输出以下数据(列标签可以保持相同,例如无需区分考试日期和第二个考试日期:)

Userid     Employee Name    DOB       Exam Date     Exam Check Date    Exam Induration
1234       John Smith       1/1/01    5/22/17       5/24/17            0
3271       Jill Son         3/3/03    2/23/17       2/26/17            0

如果要求不明确,请告诉我,谢谢您的任何反馈!

修改

以下是我尝试添加到此已存在的程序中的代码,该函数名为 Examdate

Public lstrow As Long,strDate As Variant,stredate As Variant

Sub importbuild()

Application.ScreenUpdating = False

'Define last row of exported data
lstrow = Worksheets("Data").Range("G" & Rows.Count).End(xlUp).Row

Worksheets("Data").Cells.Replace what:="=", Replacement:="", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False

'Run function to build import file for Hepatitis Immunizations
Call HepLoad("O", "P", "HB1")
Call HepLoad("Q", "R", "HB2")
Call HepLoad("S", "T", "HB3")
Call HepLoad("U", "V", "HB1")
Call HepLoad("W", "X", "HB2")
Call HepLoad("Y", "NA", "HB3")
'Run function for Hepatitis Series Completed
Call HepSeries("Z", "AA")
'Run function for Titers
Call Titer("AB", "AC", "HT")
Call Titer("AD", "AE", "RT")
Call Titer("AF", "AG", "UT")
Call Titer("AH", "AI", "VT")
'Run functions for Varicella Immunizations
Call DateOnlyLoad("AJ", "AK", "VAR1")
Call DateOnlyLoad("AL", "NA", "VAR2")
'Run function for Tetanus Immunizations
Call TetanusLoad("AM", "AN")
'Run function for MMR Immunizations
Call DateOnlyLoad("AO", "AP", "MMR1")
Call DateOnlyLoad("AQ", "NA", "MMR2")
'Call BCGLoad("BA", "NA", "BCG")
Call Examdate

Application.ScreenUpdating = True

End Sub

(省略其他功能)

Function Examdate()

Dim Exam_1_Date As Variant
Dim Exam_2_Date As Variant
Dim i As Long, j As Long

j = Worksheets("PPDCI").Range("A" & Rows.Count).End(xlUp).Row + 1
For i = 2 To lstrow

Exam_1_Date = Worksheets("Data").Range("AW" & i)
Exam_2_Date = Worksheets("Data").Range("BA" & i)

If Exam_1_Date > Exam_2_Date Then
   Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = 
Worksheets("Data").Range("F" & i & ":H" & i).Value
   Worksheets("PPDCI").Range("F" & j).Value = Exam_1_Date
Else
    If Exam_1_Date < Exam_2_Date Then
    Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = 
Worksheets("Data").Range("F" & i & ":H" & i).Value
    Worksheets("PPDCI").Range("F" & j).Value = Exam_2_Date
    End If
Worksheets("PPDCI").Range("F" & j).Value = "CAN NOT DETERMINE"
End If

Next i

End Function

当我尝试运行宏时,出现“需要对象”错误。我是否需要指定调用函数的变量?逻辑似乎也是正确的吗?

1 个答案:

答案 0 :(得分:1)

使用def color_substrings(x): c1 = 'background-color: red' c2 = '' pat = '|'.join([r'\b{}\b'.format(x) for x in df3]) mask = df["df1"].str.contains(pat) df1 = pd.DataFrame(c2, index=df.index, columns=df.columns) #modify values of df1 column by boolean mask df1.loc[mask, 'df1'] = c1 return df1 df.style.apply(color_substrings, axis=None) 语句并增加If … ElseIf … Else … End If

j