【问题标题】:Ensure a valid date inside the cell in Excel确保 Excel 单元格内的有效日期
【发布时间】:2014-02-22 16:11:28
【问题描述】:

我正在尝试准备信用卡交易列表,以便在 Excel 2010 中进行透视和进一步分析(满足个人需求)。问题是我的银行机构没有遵循标准的日期格式,所以有时日期会显示为Jun. 1, 2013,有时会显示为May 27, 2013。 Excel 不会将第一个日期识别为日期,因此它的 Pivot 不能在那个(月、季度等)上分组。列表中没有其他无法识别的日期。

有没有办法确保列中始终存在有效日期?

如果我在 .NET 中编码,一种选择是使用 ParseExact 和格式字符串 MMM. d, yyyy

另一种选择是执行If,将任何字符串转换为日期,如下所示:

If Not TypeOf MyCell Is DateTime Then _
  MyCell.Value = CDate(MyCell.Value.Substring(0,3) &
                       MyCell.Value.Substring(3))

(这是 VB.NETish 的伪语法,希望它有助于解释我的意图)。它假定无效的日期将始终是一个带有点的字符串,由转换器删除 - 我可以接受。

如何在 Excel 中执行此操作? 寻找最简单的方法。

【问题讨论】:

    标签: excel parsing date excel-2010


    【解决方案1】:

    假设您的日期为A1,此公式会将其转换为时间序列格式:

    =DATEVALUE(SUBSTITUTE(A1,".",""))
    

    然后您可以将其格式化为您想要的任何格式。

    另一个选择是使用这个 UDF:

    Function MorphDate(strDate As String) As Date
        Application.Volatile
        If VarType(strDate) <> 8 Then Exit Function
        Res = Replace(strDate, ".", "")
        MorphDate = Res
    End Function
    

    像这样使用:=MorphDate(A1),并将其格式化为您想要的任何格式。

    截图:

    【讨论】:

    • 有没有办法把 if 语句放在那里?即如果还没有日期,是否进行转换?否则对单元格不执行任何操作。
    • 是的,这是可能的。可以进行许多检查,但是看到. 是如何将它单独变成一个字符串的,我们只检查它的VarType。如果它返回String8,那么我们转换它,否则,它就是它。检查我上面的编辑。 :)
    • 作为 C# 开发人员,看到这种语法很奇怪,即传递一个装箱为字符串的日期值(imposibru!),然后对字符串进行类型检查,即If TypeOf String Is a Date...但令人惊讶的是,它在 Excel 中完美运行。 +1 并接受。
    • 感谢您的接受。 :) 我知道这实际上是不好的做法。我试过用 C 语言,打字太强了。但是,VBA 尤其是 Excel 中的 VBA 有点……“古怪”。 :D
    【解决方案2】:

    快速解决方法是全局替换 ctl h。更换 。一无所有

    【讨论】:

    • 听起来很简单,但这也可以,尽管我更喜欢自动化方法,即数据以原始形式粘贴,然后即时转换。为您的建议 +1。
    【解决方案3】:

    DateValue 仅适用于正确的区域设置,如果我们尝试在具有不同设置的计算机中打开它,则会出现错误。这将始终有效:(G21 中的文本日期)

    =DATE(RIGHT(G21;4);MATCH(1;1*(LEFT(G21;3)={"Jan";"Feb";"Mar";"Apr";"May";"Jun";"Jul";"Aug";"Sep";"Oct";"Nov";"Dec"});0);MID(G21;FIND(",";G21)-2;2))
    

    根据您的区域设置,您可能需要替换字段分隔符“;”由“,”

    【讨论】:

    • 我打算只在我的家用电脑上运行它,它使用English (US),但感谢您的提示。 +1。
    猜你喜欢
    • 2019-04-20
    • 2014-07-10
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多