如何将Sheet1的姓名列表按间隔17行导入Sheet2的B列?
解决Sheet1姓名按间隔17行导入Sheet2的方法
方法一:公式法(无需VBA)
在Sheet2的B2单元格输入以下公式,然后下拉填充至足够覆盖200个姓名的行(最终目标行约为 2 + 199*17 = 3385 行):
=IFERROR(INDEX(Sheet1!$B:$B, INT((ROW()-2)/17)+1), "")
公式逻辑:
ROW()获取当前单元格的行号(ROW()-2)/17计算当前行与起始行(B2)的间隔倍数,用INT()取整得到Sheet1中姓名的对应行偏移量- 加1后通过
INDEX()提取Sheet1!B列中对应行的姓名 IFERROR()确保超出200个姓名范围的单元格显示空白,避免出现#N/A错误
方法二:VBA宏方法(批量自动处理)
如果需要一次性完成200个姓名的导入,无需手动下拉公式,可使用VBA宏:
- 按下
Alt + F11打开VBA编辑器 - 右键点击工作簿名称,选择「插入」→「模块」
- 将以下代码粘贴到模块中:
Sub ImportNamesWithGap() Dim wsSource As Worksheet, wsTarget As Worksheet Dim lastSourceRow As Long, i As Long, targetRow As Long ' 定义源工作表和目标工作表 Set wsSource = ThisWorkbook.Sheets("Sheet1") Set wsTarget = ThisWorkbook.Sheets("Sheet2") ' 获取Sheet1中B列最后一个有数据的行号 lastSourceRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row ' 循环导入每个姓名到目标位置 For i = 1 To lastSourceRow targetRow = 2 + (i - 1) * 17 ' 计算Sheet2中的目标行号 wsTarget.Cells(targetRow, "B").Value = wsSource.Cells(i, "B").Value Next i End Sub
- 按下
F5运行宏,所有姓名会自动按要求填入Sheet2的对应位置
补充说明:
你之前尝试OFFSET公式失败,大概率是因为OFFSET对非整数偏移量的处理会出错(比如非目标行的(ROW()-2)不是17的倍数时,偏移量为小数,导致引用失效)。而INDEX+INT的组合可以规避这个问题,无论当前行是否为目标行,都能正确匹配Sheet1中的姓名行。
内容的提问来源于stack exchange,提问作者Jodalia Creations
相关产品推荐
相关产品推荐

