如何按日期合并拆分的交易描述列?公式或VBA实现咨询
解决同日期交易描述合并的问题
方法一:Excel公式实现(支持Excel 365/2021及以上)
1. 填充日期列空值
假设日期列是A列,描述列是B列,在C2单元格输入公式并下拉填充:=IF(A2="",C1,A2)
此公式会将同一日期组的空日期单元格自动填充为上方的日期值。
2. 合并对应描述
- 生成不重复日期列表:在D2单元格输入
=UNIQUE(C:C),自动列出所有唯一日期。 - 合并描述:在E2单元格输入公式并下拉:
=TEXTJOIN(" ",TRUE,FILTER(B:B,C:C=D2,""))
这会将对应日期的所有描述用空格拼接成单个字符串。
无辅助列简化版(Excel 365动态数组)
直接在任意空白单元格输入以下公式,自动生成合并后的日期-描述结果:
=LET( 填充日期, SCAN("", A:A, LAMBDA(x,y, IF(y="",x,y))), 唯一日期, UNIQUE(填充日期), 合并描述, MAP(唯一日期, LAMBDA(d, TEXTJOIN(" ", TRUE, FILTER(B:B, 填充日期=d, "")))), HSTACK(唯一日期, 合并描述) )
方法二:VBA宏实现(兼容所有Excel版本)
如果使用旧版Excel(无TEXTJOIN等函数),可以用VBA批量处理:
- 按
Alt+F11打开VBA编辑器,插入新模块。 - 粘贴以下代码:
Sub MergeSameDateDescriptions() Dim ws As Worksheet Dim lastRow As Long Dim i As Long, j As Long Dim currentDate As Variant Dim mergedDesc As String Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row i = 2 '假设表头在第一行,从第二行开始处理 Do While i <= lastRow currentDate = ws.Cells(i, "A").Value mergedDesc = ws.Cells(i, "B").Value '合并下方同日期的描述行 j = i + 1 Do While j <= lastRow And ws.Cells(j, "A").Value = "" mergedDesc = mergedDesc & " " & ws.Cells(j, "B").Value j = j + 1 Loop '写入合并后的描述 ws.Cells(i, "B").Value = mergedDesc '删除多余的拆分行 If j > i + 1 Then ws.Rows(i + 1 & ":" & j - 1).Delete lastRow = lastRow - (j - i - 1) End If i = i + 1 Loop End Sub
- 执行宏(F5),即可直接在原表格完成合并与清理。
注意:执行VBA前请备份数据,避免误操作导致数据丢失。
内容的提问来源于stack exchange,提问作者John Honai
相关产品推荐
相关产品推荐

