Excel跨工作表日期列年月匹配:复制Bob表对应整行至新表
Excel日期年月匹配并复制行解决方案
方法一:公式辅助+手动筛选复制
- 在Bob表新增辅助列(如C列),输入公式提取年月:
=TEXT(B2,"yyyy-mm"),下拉填充至所有行 - 在Mary表新增辅助列(如B列),输入公式提取年月:
=TEXT(A2,"yyyy-mm"),下拉填充至所有行 - 选中Bob表的辅助列,设置条件格式:规则选「使用公式确定要设置格式的单元格」,输入
=COUNTIF(Mary!$B:$B,C2)>0,给匹配的单元格标色 - 筛选Bob表中辅助列标色的行,选中这些行复制到新工作表
方法二:VBA代码自动处理
打开Excel按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:
Sub MatchYearMonthAndCopy() Dim wsBob As Worksheet, wsMary As Worksheet, wsNew As Worksheet Dim lastRowBob As Long, lastRowMary As Long, i As Long, j As Long Dim bobYM As String, maryYM As String Set wsBob = ThisWorkbook.Worksheets("Bob") Set wsMary = ThisWorkbook.Worksheets("Mary") Set wsNew = ThisWorkbook.Worksheets.Add wsNew.Name = "MatchedRows" ' 复制表头 wsBob.Rows(1).Copy wsNew.Rows(1) lastRowBob = wsBob.Cells(wsBob.Rows.Count, "B").End(xlUp).Row lastRowMary = wsMary.Cells(wsMary.Rows.Count, "A").End(xlUp).Row ' 遍历Bob表行 For i = 2 To lastRowBob bobYM = Format(wsBob.Cells(i, "B").Value, "yyyy-mm") ' 遍历Mary表找匹配年月 For j = 2 To lastRowMary maryYM = Format(wsMary.Cells(j, "A").Value, "yyyy-mm") If bobYM = maryYM Then wsBob.Rows(i).Copy wsNew.Cells(wsNew.Rows.Count, 1).End(xlUp).Offset(1, 0) Exit For ' 找到匹配即停止内层循环,避免重复复制 End If Next j Next i MsgBox "匹配完成,结果已保存到新工作表" End Sub
- 按F5运行代码,自动完成匹配和复制
- 若需匹配Mary表中所有对应年月的行,可删除代码里的
Exit For语句
方法三:Power Query可视化处理
- 点击「数据」选项卡,分别将Bob表和Mary表导入Power Query编辑器
- 对Bob表:添加自定义列,公式为
Date.Year([Column2]) * 100 + Date.Month([Column2]),生成年月数字标识 - 对Mary表:添加自定义列,公式为
Date.Year([Column1]) * 100 + Date.Month([Column1]),生成年月数字标识 - 选择Bob表,点击「合并查询」,关联Mary表的自定义列,匹配类型选「任意匹配」
- 筛选出匹配的行,点击「关闭并上载」到新工作表
内容的提问来源于stack exchange,提问作者giacomo pincin
相关产品推荐
相关产品推荐

