Excel工作表公式实现:根据指定行号自动复制对应行数据
Excel跨工作表自动匹配复制数据实现方案
方法一:公式法(无需宏,兼容性好)
假设第一个工作表名为Sheet1,第二个为Sheet2,且两者均为结构化表格。
- 选中
Sheet2中lines列右侧的第一个单元格(例如B2单元格) - 输入以下公式(Excel 365/2021及以上版本适用):
若使用旧版Excel,可改用=XLOOKUP([@lines], Sheet1[lines], Sheet1[#ThisRow])INDEX+MATCH组合公式(需按Ctrl+Shift+Enter作为数组公式输入,新版Excel无需此操作):=INDEX(Sheet1[#All], MATCH([@lines], Sheet1[lines], 0), COLUMN()) - 按回车后,公式会自动填充到表格的整列区域。此后只要在
Sheet2的lines列输入编号,对应行就会自动同步Sheet1中相同编号行的全部数据。
注意:删除
Sheet2中lines列的编号后,对应行的同步数据会变为#N/A,若需要保留数据可改用下方VBA方法。
方法二:VBA宏方法(直接复制数据,灵活性高)
通过工作表事件实现输入编号后自动复制整行数据:
- 按下
Alt+F11打开VBA编辑器 - 在左侧项目窗口中找到
Sheet2,双击打开其代码窗口 - 粘贴以下代码:
Private Sub Worksheet_Change(ByVal Target As Range) Dim wsSource As Worksheet Dim matchRow As Long Set wsSource = ThisWorkbook.Worksheets("Sheet1") ' 仅监听lines列的单元格修改 If Not Intersect(Target, Me.ListObjects(1).ListColumns("lines").Range) Is Nothing Then If Target.Cells.Count = 1 Then ' 在Sheet1中查找对应编号的行 matchRow = Application.Match(Target.Value, wsSource.ListObjects(1).ListColumns("lines").Range, 0) If Not IsError(matchRow) Then ' 复制对应行数据到当前行 wsSource.ListObjects(1).ListRows(matchRow).Range.Copy Target.EntireRow ' 保留输入的lines编号(避免被复制数据覆盖) Target.Value = Target.Value End If End If End If End Sub - 关闭VBA编辑器,返回Excel界面
注意事项
- 将代码中的
Sheet1替换为你实际的第一个工作表名称 - 保存文件时需选择
.xlsm格式(启用宏的工作簿) - 输入编号后,数据会直接复制到
Sheet2的对应行,即使删除编号,数据仍会保留
内容的提问来源于stack exchange,提问作者David Penn
相关产品推荐
相关产品推荐

