Karan在工作簿中有很多文本数据。某些文本数据包含日期。她需要一种删除日期的方法,但要保留单元格中可能保留的其他任何文本。例如,从“ 4/15/16测试成功运行”或“测试在4/15/16运行”开始,在删除后,将是“

测试成功运行”和“测试运行”。

如果日期始终遵循简单的模式,则可以使用SUBSTITUTE函数将其删除。例如,如果日期始终由一位数字的月份和两位数字的日期组成,则可以使用以下命令将其删除:

=SUBSTITUTE(A1,MID(A1,SEARCH("?/??/??",A1),7),)

这样的公式存在多个问题。首先,如果单元格A1中没有日期,或者如果单元格A1中的日期只有一位数字,它将返回一个错误值。此外,如果日期具有两位数的月份,则它会保留该第一位数字不变(假设日期使用两位数的日期)或返回错误值(如果日期使用一位数的日期)。

如果日期显示在单元格中文本的开头或结尾,则可以使用其他类型的公式:

=IFERROR( IF( VALUE( LEFT( A1, 1)) > 0, RIGHT( A1, LEN(A1) - 7), ""), LEFT( A1, FIND( "/", A1) - 2))

这种方法的问题在于,它还需要精确的图案M / DD / YY或MM / D / YY。因此,它表现出与先前公式相同的问题。

一种更通用的方法是使用宏搜索日期,然后将其从字符串中删除。下面的示例宏查看单元格的内容,并使用Split函数将其分解为“单词”。然后,只要单词不是日期,它就会开始将单词放在一起。

Function RemoveDates(ByVal vC As String)

Dim arr As Variant     Dim s As String     Dim i As Integer

RemoveDates = ""

If vC > "" Then         arr = Split(vC, " ")

For i = LBound(arr) To UBound(arr)

If Not IsDate(arr(i)) Then                 s = s & arr(i) & " "

End If         Next i         RemoveDates = Left(s, Len(s) - 1)

End If End Function

您可以将宏用作工作表中的用户定义函数,如下所示:

=RemoveDates(A1)

此宏的唯一缺点是,如果单词之间有多个空格,则这些空格将在替换过程中删除。如果这对您来说很重要,则可以考虑依赖宏中的正则表达式,如下所示:

Function RemoveDates(MyRange As Range) As String     Dim sRaw As String     Dim sPattern As String     Dim regEx As New RegExp

sRaw = MyRange.Value

sPattern = "[0-9]{1,2}[-.\\/][0-9]{1,2}[-.\\/][0-9]{2}"



With regEx         .Global = True         .MultiLine = True         .IgnoreCase = False         .pattern = sPattern     End With

If regEx.Test(sRaw) Then         RemoveDates = regEx.Replace(sRaw, "")

Else         RemoveDates = "Not matched"

End If     Set regEx = Nothing End Function

在您的工作表中使用此功能的方式与以前的用户定义功能相同:

=RemoveDates(A1)

对某些人来说,使用正则表达式似乎是一门妖术,但是这种特殊用法非常简单。模式(存储在sPattern变量中)表示,一个或两个数字后跟一个分隔符(破折号,句点,反斜杠或正斜杠),然后再加上一个或两个数字,再加上另一个分隔符后跟两个数字,则视为日期。如果在单元格中找到这样的匹配项,则将其删除。

为了使用常规的压缩方法,您需要确保在Visual Basic编辑器中包括对以下库的引用(从“工具”菜单中选择“引用”):

Microsoft VBScript Regular Expressions 5.5

您还应注意,如果您引用的单元格中没有日期,该函数将返回“不匹配”。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(7768)适用于Microsoft Excel 2007、2010、2013和2016。