【问题标题】:Invert day and month from a date value if condition is met如果满足条件,则从日期值反转日期和月份
【发布时间】:2016-08-12 02:08:37
【问题描述】:

我在 Excel 中有以下两个日期列:

A                       B
DD-MM-YYYY              DD-MM-YYYY HH:MM

如果这两列的日值和月值不匹配,且B列的月份与A列的日匹配,B列的日与A列的月匹配,则我必须反转 B 列的日期和月份值。

例如,如果我有:

A                        B
04-10-2016               10-04-2016 22:10

我需要 VBA 把它变成:

A                        B
04-10-2016               04-10-2016 22:10

我会这样做:

For j=1 to Range("A1").End(xlDown).Row
   If ExtractDate(Cells(j, 2)) <> Cells(j, 1) And ExtractMonth(Cells(j, 2)) = ExtractDay(Cells(j, 1) And ExtractDay(Cells(j, 2)) = ExtractMonth(Cells(j, 1) Then
   InvertDayAndMonth(Cells(j, 2)
   End if
Next j

我知道这些功能不存在,有人可以帮我解决吗?

【问题讨论】:

  • 我建议正确导入日期以开始。 DMY vs MDY 问题令人头疼。 27/04/2016 将作为文本出现,因为它无法解析,但 07/04/2016 将变为 04-Jul-2016,因为它会被错误解析。见Convert String to Date VBA

标签: vba excel date datetime


【解决方案1】:

没有真正需要进行检查。如果保证 A 列中的日期准确无误,那么您只需要 B 列中的时间部分。

从 B 列中提取时间部分并将其添加到 A 列的日期部分。将结果放在您需要的地方。

【讨论】:

    【解决方案2】:

    这是我为解决它所做的:

    For j = 3 To Range("A1").End(xlDown).Row
    
    If Day(Cells(j, 2).Value) = Month(Cells(j, 3).Value) And Month(Cells(j, 2).Value) = Day(Cells(j, 3).Value) Then
        d = Cells(j, 3).Value
        Cells(j, 3) = DateSerial(Year(d), Day(d), Month(d)) + TimeSerial(Hour(d), Minute(d), Second(d))
    End If
    
    Next j
    

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      相关资源
      最近更新 更多