如何根据偏移/字符串匹配从总表提取数据到同工作簿多工作表指定列
需求说明
- 将N60单元格的取值粘贴到O17单元格
- 把不同表格的其余所有数据,填入同一工作簿内所有工作表的指定列
总表数据格式

修正后VBA代码
原有参考代码存在目标列笔误(将字母O写为数字0),且缺少N60到O17的赋值逻辑,修正后可用代码如下:
Sub Data_Click() Dim wkSht As Worksheet Dim cell As Range Dim lastrow As Long, blankRow As Long, offsetRow As Long ' 获取Combine总表已使用的最大行号 lastrow = Sheets("Combine").UsedRange.Rows.Count ' 遍历Combine总表A列从第2行开始的所有单元格 For Each cell In Sheets("Combine").Range("A2", "A" & lastrow).Cells ' 遍历当前工作簿所有工作表 For Each wkSht In ThisWorkbook.Worksheets ' 匹配总表A列值和工作表名称 If cell.Value = wkSht.Name Then ' 计算当前分组的空白行位置 If cell.End(xlDown).Row > lastrow Then blankRow = lastrow Else blankRow = cell.End(xlDown).Row - 1 End If ' 计算偏移行数 offsetRow = Application.WorksheetFunction.RoundDown(Sheet1.Cells(blankRow, 12).Value, 0) ' 按需求复制指定列数据到对应工作表的B17起始位置 Sheets("Combine").Range(cell.Offset(0, 13), cell.Offset(offsetRow, 13)).Copy wkSht.Range("B17") ' 修正原代码笔误:将数字0改为字母O,对应O17单元格 Sheets("Combine").Range(cell.Offset(0, 18), cell.Offset(offsetRow, 18)).Copy wkSht.Range("O17") ' 新增需求逻辑:将N60单元格值粘贴到当前工作表的O17单元格 wkSht.Range("O17").Value = Sheets("Combine").Range("N60").Value End If Next wkSht Next cell End Sub
代码使用说明
- 代码默认总表名称为
Combine,如果你的总表名称不同,需自行替换代码中所有Sheets("Combine")里的表名 - 列偏移量是基于你提供的参考代码保留,如果实际总表列顺序有调整,可自行修改
Offset的第二个参数值
内容的提问来源于stack exchange,提问作者Samiul30
相关产品推荐
相关产品推荐

