You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel跨工作表按条件复制目标行上下行的指定单元格

实现Excel指定条件下复制上一行指定列的方法

完全可以实现你的需求,高级筛选确实无法直接定位目标行的上下行,推荐用以下两种方案:

方案一:VBA宏(高效直接)

这是最灵活的方式,能精准定位并复制目标行:

  1. 按Alt + F11打开VBA编辑器
  2. 右键点击左侧工程窗口里的当前工作簿,选择「插入」→「模块」
  3. 粘贴以下代码:
Sub CopyPreviousRow()
    Dim srcSheet As Worksheet, destSheet As Worksheet
    Dim lastRow As Long, i As Long
    Dim targetText As String
    
    ' 配置参数
    Set srcSheet = ThisWorkbook.Sheets("Sheet1") ' 源工作表
    Set destSheet = ThisWorkbook.Sheets("目标工作表") ' 替换成你的目标表名
    targetText = "1010" ' 替换成你要匹配的文本
    
    lastRow = srcSheet.Cells(srcSheet.Rows.Count, "D").End(xlUp).Row
    ' 从第2行开始遍历(避免第一行没有上一行)
    For i = 2 To lastRow
        ' 检查当前行D列是否包含目标文本
        If InStr(1, srcSheet.Cells(i, "D").Value, targetText, vbTextCompare) > 0 Then
            ' 复制上一行的A、B、C、F列到目标表的下一行
            srcSheet.Cells(i - 1, "A").Resize(1, 3).Copy destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Offset(1, 0)
            srcSheet.Cells(i - 1, "F").Copy destSheet.Cells(destSheet.Rows.Count, "D").End(xlUp).Offset(1, 0)
        End If
    Next i
End Sub
  1. 修改代码里的目标工作表和targetText为你的实际信息
  2. 按F5运行宏,完成复制

方案二:公式辅助(无需VBA)

如果不想用宏,可以通过辅助列标记目标行,再提取数据:

  1. 在Sheet1新增一列(比如G列),在G2单元格输入公式:
=IF(ISNUMBER(SEARCH("1010",D3)),"需要复制","")

下拉填充到所有行,这个公式会标记出下一行D列包含目标文本的行(也就是你需要复制的上一行)
2. 在目标工作表的A2单元格输入公式:

=INDEX(Sheet1!$A:$A,SMALL(IF(Sheet1!$G:$G="需要复制",ROW(Sheet1!$G:$G)),ROW(A1)))

按Ctrl + Shift + Enter(旧版Excel)或直接回车(新版动态数组Excel),然后向右拖动到C列;再在D列输入:

=INDEX(Sheet1!$F:$F,SMALL(IF(Sheet1!$G:$G="需要复制",ROW(Sheet1!$G:$G)),ROW(A1)))

同样按组合键或回车,下拉填充即可提取所有符合条件的行

注意:如果目标文本在D1单元格,因为没有上一行,两种方案都会自动跳过这种情况。

内容的提问来源于stack exchange,提问作者Pbcf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 06:22:45