Excel VBA对比同列相邻单元格 仅首次出现时展示日期的实现问题
解决方案
你可以直接修改现有VBA代码,在拆分完成后新增合并逻辑即可,和你之前用公式实现的逻辑完全一致,完整代码如下:
Sub CommandButton1_Click() Dim rng As Range, lastRow As Long, i As Long Dim preDate As Date, curDate As Date Set rng = [A1] lastRow = Cells(Rows.Count, rng.Column).End(xlUp).Row Set rng = Range(rng, Cells(lastRow, rng.Column)) ' 原有拆分逻辑保持不变 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 ' 新增合并逻辑,结果输出到D列,可自行修改列号 preDate = "1900-01-01" ' 初始值设为不可能出现的日期 For i = 1 To lastRow curDate = Cells(i, "B").Value If curDate <> preDate Then ' 首次出现该日期,拼接日期+时间 Cells(i, "D").Value = Format(curDate, "mm/dd/yyyy") & " " & Cells(i, "C").Value preDate = curDate Else ' 同日期的后续行,仅保留时间,可按需在前面加空格对齐 Cells(i, "D").Value = Cells(i, "C").Value End If Next i End Sub
调整说明
- 代码默认将合并结果输出到D列,你可以修改
Cells(i, "D")里的列标,比如改成"A"就直接覆盖原始数据列 - 如果你的数据包含表头,把循环起始值
i = 1改成i = 2即可 - 如果你需要时间部分和上面的日期行对齐,可以把
Cells(i, "D").Value = Cells(i, "C").Value改成Cells(i, "D").Value = Space(12) & Cells(i, "C").Value,空格数量可按需调整
内容的提问来源于stack exchange,提问作者Eva
相关产品推荐
相关产品推荐

