【问题标题】:subtracting integer from a date format VBA从日期格式 VBA 中减去整数
【发布时间】:2023-04-06 19:01:02
【问题描述】:

以下是我开发的代码。目标是从数据中减去“1”或“2”,具体取决于分别是星期六还是星期日。第 3 列包含短日期格式的日期,第 5 列包含相同的日期但转换为“dddd”格式。

错误发生在for循环的行内

if cells(i,5).Value = "Sat" Then

这里有趣的是,代码运行时没有出现“错误”,它只是跳过了该行的 if 语句。

Sub DataChange()
    Dim i
    Dim n
    n = Cells(Rows.Count, 3).End(xlUp).Row
    For i = 4 to n
        If Cells(i,5).Value = "Sat" Then
            Cells(i,3).Value = Cells(i,3).Value - 1
        End If
        If Cells(i,5).Value = "Sun" Then
            Cells(i,3).Value = Cells(i,3).Value - 2
        End If
    Next i
End Sub

【问题讨论】:

  • 您确定日期已转换,而不仅仅是以“dddd”格式显示吗?如果您只是更改了格式,cells(i,5).Value 仍然是一个日期,而不是一个字符串,并且不能与“Sat”进行比较。在这种情况下,您应该使用Cells(i,5).Text

标签: excel vba function date subtraction


【解决方案1】:

第 5 列包含相同的日期,但已转换为“dddd”格式

“dddd”公开“星期六”,而不是“ddd”公开的“星期六”。

仍然尝试用 Cells(i,5).Text 更改 Cells(i,5).Value:

If Cells(i,5).Text = "Sat" Then ....

If Cells(i,5).Text = "Saturday" Then ....

【讨论】:

    【解决方案2】:

    只需将其全部替换为:

    For i = 1 To Cells(Rows.Count, 3).End(xlUp).Row
        With Cells(i, 3)
            .Value = .Value - IIf(Weekday(.Value, vbSaturday) < 3, Weekday(.Value, vbSaturday), 0)
        End With
    Next
    

    Weekday() 方法根据您提供的开始日期返回一个表示一周中某一天的整数。 Weekday(.Value, vbSaturday) 将在星期六返回 1,在星期日返回 2。结合立即 If IIf() 我们可以检查返回的值是否小于 3(例如 1 或 2),如果是,则从 C 列中的日期中减去该值

    【讨论】:

      猜你喜欢
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多