Excel 如何更改具有过去日期的单元格的值

Excel 如何更改具有过去日期的单元格的值,excel,ms-access,vba,Excel,Ms Access,Vba,我试图只选择范围内过去的日期。所以在B列中,我需要所有从今天开始有日期的单元格都说日期已经过去了。我是一个初学者,已经尝试过这个代码,但它不工作 Sub FilterDateBeforeToday() Set rrg = "dd/mm/yyyy" rrg = Range("b1:b2000") If rrg = Now - 1 Then ActiveCell.Value = "data already gone" End If End Sub 有人能帮我吗?只要B1:B2000都是日期

我试图只选择范围内过去的日期。所以在B列中,我需要所有从今天开始有日期的单元格都说日期已经过去了。我是一个初学者,已经尝试过这个代码,但它不工作

Sub FilterDateBeforeToday()

Set rrg = "dd/mm/yyyy"

rrg = Range("b1:b2000")
If rrg = Now - 1 Then

ActiveCell.Value = "data already gone"

End If
End Sub

有人能帮我吗?

只要B1:B2000都是日期。您需要循环遍历每个单元格,并检查它是否是以前的日期

for i = 1 to 2000
    if range("B" & i).value < now - 1 then range("B" & i).value = "Data already gone"
next

如果只是将其作为activecell.value,那么在运行宏之前处于活动状态的任何单元格都会发生更改

可以循环遍历范围中的每个单元格,然后检查日期是否已过

Public Sub RemovePastDates()

Dim rng As Range, cell As Range

Set rng = ThisWorkbook.Worksheets(1).Range("B1:B2000")

For Each cell In rng
    If cell.Value <= Now - 1 Then
        cell.Value = "Date has passed"
    End If
Next cell

End Sub
请注意,我已经明确引用了工作簿和工作表,以确保修改了正确的工作表。

Set rrg需要一个范围对象,而不是Set rrg=dd/mm/yyyy中的字符串

rrg=Rangeb1:b2000将是正确的,如果继续使用集合I,则使用[]符号,这对于单单元格赋值更为简单,例如集合rrg=[A1]

如果rrg=现在为-1,则。。。rrg是一个范围。。。您需要对该范围内的每个单元格重复If,例如,通过对每个单元格使用a。。。参见示例

ActiveCell.Value=数据已丢失。。。不管你的循环是什么。。。ActiveCell始终指当前光标位置的单元格

Sub FilterDateBeforeToday()
Dim MyRange As Range, MyCell As Range

    Set MyRange = Range([B1], [B1000])

    For Each MyCell In MyRange.Cells

        ' test if it contains a date ...
        ' on the 2nd pass we may have a string there already
        If VarType(MyCell) = vbDate Then

            ' use Int() to compare against today 00:00 hrs
            If MyCell < Int(Now()) Then
                MyCell = "Date passed"
            End If

        End If

    Next MyCell

End Sub

现在返回日期加时间。。。现在,一天的开始是删除了小数部分。。。所以所有比今天开始小的事情都过去了。。。这比只需使用自动过滤器,无需循环:

Sub FilterDateBeforeToday()

With Range("B1:B2000")
    .AutoFilter 1, "<" & CLng(Date) '// Filter any dates before today
    .SpecialCells(12).Value = "Date already gone" '// Replace visible cells with text.
End With

ActiveSheet.AutoFilterMode = False '// Remove filter.

End Sub

请注意此工作簿和ActiveWorkBook之间的细微差别宏运行时,但并不像我预期的那样。它没有从pastI了解问题的日期中选择所有日期。我工作表上的日期是公式的结果,那么它就不起作用了。如果我只写没有任何公式的日期,它是有效的。您知道如何调整代码以接受公式结果吗?公式是否真的会产生日期。。。或者更确切地说,在一个看起来像日期的文本中?它不能正常工作,没有选择今天之前的所有日期,那么您的日期实际上没有被格式化为日期。