【发布时间】:2022-01-02 17:25:48
【问题描述】:
我在excel中有这样的数据,一栏:
10/15/2021 7:59:42 AM
10/15/2021 7:59:44 AM
10/15/2021 7:59:46 AM
.
.
.
10/16/2021 7:59:42 AM
10/16/2021 7:59:48 AM
10/16/2021 7:59:49 AM
我在 VBA 中使用此代码创建了两列,一列带有日期,一列带有时间:
Sub CommandButton1_Click()
Dim rng As Range
Set rng = [A1]
Set rng = Range(rng, Cells(Rows.Count, rng.Column).End(xlUp))
rng.Texttocolumns Destination:=[B1], DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, xlMDYFormat), Array(2, xlMDYFormat), Array(3, xlGeneralFormat)), _
TrailingMinusNumbers:=True
Columns("C").Delete
Columns("E").Delete
Columns("D").Delete
End Sub
在那之后,我有两列。 我的目标是有一个包含日期和时间的列,但仅在第一次出现日期时才有日期。 我已经使用 IF 和后来的 CONCAT 使用 excel 完成了此操作。 我复制了第一行,第二行我使用了:
IF(B3=B2,"",B3)
结果是空单元格,然后我将 CONCAT 与包含时间的行一起使用。 我很想在 VBA 中执行此操作,但我不确定如何操作。
【问题讨论】:
-
您的日期很可能不是文本字符串,而是经过格式化以显示您所见方式的真实日期。
TextToColumns作用于单元格中的值,而不是格式化显示。但 Excel 将日期存储为十进制数,其中整数部分表示自 1900 年 1 月 1 日以来的天数,小数部分表示一天(或时间)的分数。所以你需要相应地拆分成值的整数部分和小数部分。 -
您真正想要完成什么?消除重复(相同)的日期?如果是这样,您应该使用单个代码行
rng.RemoveDuplicates 1。没有TextTocolumns部分... -
我没有任何重复的数据,我有相同的日期但不同的时间。我用 texttocolumn 将它们分开,所以我可以应用 IF 并仅在第一次出现时获取日期,而在其他单元格中我变空了,所以当我使用 CONCAT 时,我只有第一次有日期 + 时间,而对于其他单元格我有只有时间。我用 if 和 concat 很容易做到这一点,但我想用 VBA 做到这一点
-
@RonRosenfeld TexttoColumns 部分一切正常,我在一列日期,在一列时间内得到我想要的。我之后做的事情很重要,因为我用 IF 和 CONCAT 做,我想用 VBA 做。
-
总是更快地将两列读入 VBA 数组(参见Arrays and Ranges in VBA),然后循环遍历它,将相应的条目清空;然后将数组写回工作表。
标签: excel vba if-statement