我很高兴使用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
当我尝试运行宏时,出现“需要对象”错误。我是否需要指定调用函数的变量?逻辑似乎也是正确的吗?
答案 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