excel - VBA - 在命名范围内使用 for 循环添加 dd/mm/yyyy 以增加 hh/mm 单元格值
问题描述
我很新,VBA
所以请原谅这个问题,我正在编写一个代码,它将遍历一个命名范围并添加dd/mm/yyyy
,当单元格值通过时 dd 逐渐增加0000
。
我在if time1 < time2 then statement
.
具体如何引用'dd/mm/yyyy'
inactive cell
而不是hh/mm
.
关于如何做到这一点的更好逻辑的任何建议或意见!
Sub changeDate()
Dim rng As Range: Set rng = Sheets("Sheet3").Range("starttime")
Dim cel As Range
Dim time2 As String
Dim time1 As String
Sheets("Sheet3").Range("starttime").Activate
For Each cel In rng.Cells
cel.Select
time1 = ActiveCell.Value
time2 = ActiveCell.Offset(1, 0).Value
If time1 < time2 Then
'**** use time1 dd/mm/yyyy + time2 hh/mm for value of time2
End If
If time1 > time2 Then
'**** use (time1 dd/mm/yyyy + one day) + time2 hh/mm for value of time2
End If
Next cel
End Sub
' example of named range starttime
'02/01/2018 07:25
'00/01/1900 12:28
'00/01/1900 17:38
'00/01/1900 01:01
'00/01/1900 08:07
'00/01/1900 13:22
'00/01/1900 18:33
'00/01/1900 01:45
'00/01/1900 08:47
'00/01/1900 14:20
解决方案
您可以使用 FIX() 获取任何数字的整数部分,在本例中为日期时间值的日期部分。此外,您应该避免选择单元格,它会减慢代码的执行速度,您甚至不必将临时变量分配给您正在比较的值:
For Each cel In Rng.Cells
With cel
If .Value < .Offset(1, 0).Value Then
'**** use time1 dd/mm/yyyy + time2 hh/mm for value of time2
ElseIf .Value > Fix(.Offset(1, 0).Value) Then
'**** use (time1 dd/mm/yyyy + one day) + time2 hh/mm for value of time2
End If
End With
Next cel
干杯,迈克尔
推荐阅读
- node.js - 如何通过在 socket.io 中发出断开事件来断开用户的连接
- symfony - 调试学说主/从查询
- c - Makefile - 使用正则表达式导出
- apache - JSP 在 apache tomcat 服务器中运行时显示原始代码
- javascript - 过滤用户输入的前两个字符,并从外部数据库中检索以过滤输入开头的任何匹配词
- vba - 将月份名称(法语)转换为月份编号
- selenium - 如何在 Chrome 浏览器上使用 selenium 处理登录身份验证弹出窗口
- mongodb - $lookup 后的 $group 花费的时间太长
- tensorflow - 如何在谷歌 colab 上将数据从 CPU 传输到 GPU 运行时?
- c++ - 使用 target_link_libraries 时避免自动添加“lib”前缀