【问题标题】:How to get VBA to replace dates later than 05/04/2016 with 05/04/2016如何让 VBA 用 05/04/2016 替换晚于 05/04/2016 的日期
【发布时间】:2017-07-25 11:18:02
【问题描述】:

这是我在这里的第一个问题,所以我会尽可能清楚。

我在 Excel 中有一个大型数据集,我特别感兴趣的一列有 cmets,例如“您好,该产品的发布日期是 08/04/2017”。我希望创建一个代码,允许我将这些单元格中的每个日期更改为 05/04/2016。

编辑:为了清楚起见,每个单元格可能包含也可能不包含多个日期!

代码将在理想情况下识别单元格中 2016 年 5 月 4 日之后的任何日期,并将其确定为 2016 年 5 月 4 日,而不会触及任何不是日期的文本,或 2016 年 5 月 4 日之前的日期细胞。

这是我一直在使用的代码,如果有帮助的话,

ReplaceDate()

暗淡 x 为日期

对于 x = 6 / 4 / 2016 至 05 / 04 / 2020

Range("C2:C31").Select
Selection.NumberFormat = "dd/MM/yyyy"
Selection.Replace "x", Replacement:="05/04/2016", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

下一个 x

结束子

正如您可能已经猜到的那样,现在代码实际上替换了单元格中的任何“X”,但我尝试了诸如Selection.Replace DataValue > 05/04/2016 之类的东西。

任何帮助将不胜感激!

亲切的问候。

【问题讨论】:

  • 每个单元格是否只有一个日期,是否始终是句子的最后一个“单词”?
  • 抱歉,每个单元格可能包含也可能不包含多个日期,抱歉我没有具体说明。不过感谢您的帮助。

标签: vba excel date


【解决方案1】:

你可以试试:

Sub ChangeDate()
    Dim cell As Range
    Dim words As Variant
    Dim iWord As Long

    For Each cell In Range("C2", Cells(Rows.count, "C").End(xlUp)) '<--| loop through column C cells from row 2 down to last not empty one
        words = Split(cell, " ")
        For iWord = 0 To UBound(words)
            If IsDate(words(iWord)) Then If CDate(words(iWord)) > CDate("05/04/2016") Then words(iWord) = "05/04/2016"
        Next
        cell.Value = Join(words, " ")
    Next
End Sub

【讨论】:

  • @Ian,如果我的回答解决了您的问题,请点击答案旁边的复选标记以将其从灰色切换为已填写,以接受它。谢谢
  • @Ian,我在您澄清后编辑了答案。如果它解决了您的问题,我将不胜感激您将其标记为已接受。谢谢
  • 非常感谢,帮了大忙!如果您想在某个时候给我发消息,我很乐意向您介绍 VBA。祝你周末愉快,我标记了你的评论。再次感谢!
猜你喜欢
  • 2016-08-29
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多