【发布时间】:2018-05-19 04:07:30
【问题描述】:
我有一些日期数据要清理并删除日期中的所有文本。
我有以下将数据输出到工作表的代码,它有一个单独的 datecleanup 函数,如果缺少日期或只有 4 位数字,它会执行一些日期清理,但是我仍然在输出数据包含日期和文本的混合(以下示例)。
主要功能:
Function TetanusLoad(col As String, col2 As String)
Dim i As Long, j As Long, k As Long
j = Worksheets("CI").Range("A" & Rows.Count).End(xlUp).Row + 1
k = Worksheets("Error").Range("A" & Rows.Count).End(xlUp).Row + 1
For i = 2 To lstrow
If Len(Worksheets("Data").Range(col & i).Value) = 0 And
Len(Worksheets("Data").Range(col2 & i).Value) = 0 Then
GoTo EmptyRange
Else
strDate = spacedate(Worksheets("Data").Range(col & i).Value)
Worksheets("CI").Range("A" & j & ":C" & j).Value =
Worksheets("Data").Range("F" & i & ":H" & i).Value
Select Case Worksheets("Data").Range(col2 & i).Value
Case "Tdap"
Worksheets("CI").Range("D" & j).Value = "TDA"
Case "Td"
Worksheets("CI").Range("D" & j).Value = "TD"
Case Else
Worksheets("CI").Range("D" & j).Value = "REVIEW"
End Select
Worksheets("CI").Range("E" & j).Value = datecleanup(strDate)
j = j + 1
End If
EmptyRange:
Next i
End Function
日期清理功能:
Function datecleanup(inputdate As Variant) As Variant
If Len(inputdate) = 0 Then
inputdate = "01/01/1901"
Else
If Len(inputdate) = 4 Then
inputdate = "01/01/" & inputdate
Else
If InStr(1, inputdate, ".") Then
inputdate = Replace(inputdate, ".", "/")
End If
End If
End If
datecleanup = inputdate
End Function
我正在尝试纠正的 E 列的示例数据输出示例:
07/06/1993 - HAD ALLERGIC REACTION ; ARM SWELLED AND GOT RED AND HOT
09/23/2004 - REPORTS REACTION TO TETANUS SHOT
12/03/2015 Rubelo reported
我不希望包含额外的文本,因为这应该是一个仅限日期的字段。我怎样才能做到这一点?理想情况下,我希望它在 datecleanup 函数中被引用,因为其他函数也使用它。
【问题讨论】:
-
@RobHaupt 在这个link 上给出的答案在你的三个例子中给出了正确的结果。
=FormatOutput("07/06/1993 - HAD ALLERGIC REACTION ; ARM SWELLED AND GOT RED AND HOT")返回34127- 1993 年 6 月 7 日(我在英国 - dd/mm/yyyy 格式也是如此)。只需根据需要更改函数名称,我也会比他的答案更具体地了解变量类型......但它有效。 -
要添加到我在上一条评论中给出的链接 - 我还要在
Exit For语句之后添加Else: FormatOutput = CVErr(xlValue)作为接下来的两行 - 然后这将返回#Value!而不是 0非日期。 -
感谢您提供的链接。我正在努力将其合并到我现有的 datecleanup 函数中(如果可能的话)。感谢您的帮助。
-
从外观上看,您只需将
Worksheets("CI").Range("E" & j).Value = datecleanup(strDate)更改为Worksheets("CI").Range("E" & j).Value = FormatOutput(strDate)- 或将FormatOutput函数名称更改为datecleanup。 -
我收到类型不匹配的运行时错误。我的 strDate 全局变量被定义为 Variant。我也可以保留 CreateObject("vbscript.regexp) 原样吗?再次感谢。