我希望每当数据输入单元格 B5-B39 时,单元格 C5-C39 都会自动填充今天的日期。
我曾尝试使用它来使其发挥作用=TODAY()
,但不知道如何构建公式。
答案1
我认为最简单的方法是使用用户定义函数。该函数将在其引用的任何单元格发生变化时更新,因此您无需将其与任何事件联系起来。
解决您问题的功能是:
Function Updating_Date(dependent_cell as Range) As Date
Updating_Date = Date
End Function
将该代码放入工作簿中的模块后,您只需将其输入然后复制下来即可=Updating_Date(B5)
。C5
这样,只要 C 列中的值发生变化,C5 中的日期就会更新。
为了使日期仅在 B 列单元格不为空时显示,您可以在 C 列单元格中应用 if 公式,正如我在你问的另一个问题。只需输入与我在此处显示的相同的条件(即) ,如果条件为真,ISBLANK(B5)
则返回值为空字符串( ),如果条件为假,则返回值为 UDF()。""
Updating_Date(B5)
答案2
每当单元格“A”发生变化时,以下操作就会将今天的日期放入单元格“B”中:
Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
For Each Cell In Target
If Cell.Column = Range("A:A").Column Then
If Cell.Value <> "" Then
Cells(Cell.Row, "B").Value = Int(Now)
Else
Cells(Cell.Row, "B").Value = ""
End If
End If
Next Cell
End Sub
此代码需要放在您希望发生此行为的工作表的 VBA 模块中。
答案3
无需 VBA 即可完成此操作。我需要根据 B 列中输入的值,用今天的日期填充 C 列。此公式可正确插入。
=IF(ISBLANK(B2)," ",NOW())
我将其放在 C2 单元格中,因为这是我的 C 列的起始位置。您可以将其放在您开始的任何列的单元格中。然后,只需确保我的 B2 引用被替换为您要输入值的列和单元格。例如,如果您的起始单元格是 F3,您应该将公式更改为
=IF(ISBLANK(F3), " ",NOW()).
如果相应的日期单元格是 K3,请将公式放在此处。(一旦公式位于第一个单元格中,您就可以将其拖到该列的其余单元格中。)
此公式将日期单元格保留为空,直到“开始”单元格输入值。输入该值后,将添加日期。如果删除该值,Excel 将自动删除该日期。所以它并不完美,但如果您需要更复杂的东西,您可能需要 Excel 专家或为您处理此事的程序。
答案4
AFIK,您需要通过 VBA 执行此操作。您可以创建一个函数来监视工作表上的更改,仅过滤掉单元格 B5-B39 上的更改并相应地更新 C 中的单元格。
更新:您可能知道如何使用 alt-F11 进入 VBA。
双击名为 Sheet1 的 Excel 对象或您感兴趣的任何工作表(在左上角的树列表中)以获取该工作表的代码。
从两个下拉列表中选择“工作表”和“更改”。这样你就得到了如下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
变量“目标”现在可用,它是对发生变化的单元格的引用。
在这些行之间添加一些代码:
debug.Print Target
然后按 ctrl-G 显示即时窗口
在工作表中进行一些更改并切换回代码,您将看到输入的数据出现在“即时”窗口中。
现在将代码改为这样if Target.
,你会看到与 Target 变量相关的可能属性的下拉列表。
经过一些改变,你可以得到这个:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And (Target.Row > 4 And Target.Row < 40) Then
Debug.Print Target.Value
End If
End Sub
现在仅打印您感兴趣的范围内的更改。
如果您想知道如何更改单元格中的值,您可以手动录制宏并检查代码。希望您现在有足够的知识可以继续。如果没有,请告诉我。