![向下复制公式,跳过单元格,但让其从其他工作表中以单个增量提取数据](https://linux22.com/image/1465728/%E5%90%91%E4%B8%8B%E5%A4%8D%E5%88%B6%E5%85%AC%E5%BC%8F%EF%BC%8C%E8%B7%B3%E8%BF%87%E5%8D%95%E5%85%83%E6%A0%BC%EF%BC%8C%E4%BD%86%E8%AE%A9%E5%85%B6%E4%BB%8E%E5%85%B6%E4%BB%96%E5%B7%A5%E4%BD%9C%E8%A1%A8%E4%B8%AD%E4%BB%A5%E5%8D%95%E4%B8%AA%E5%A2%9E%E9%87%8F%E6%8F%90%E5%8F%96%E6%95%B0%E6%8D%AE.png)
我正在帮助创建一张时间表,它从工作表 1 中提取数据并将其添加到工作表 2 上的列表中。数据需要引用工作表 1 中的 A42,然后是 A73、A115、A146、A188 等,遵循 42、31、42、31 的间距模式;100 个这样的实例。我如何以这种方式引用数据?
答案1
由于您需要引用的 Sheet1 单元格似乎存在恒定模式,因此只需构建一个公式,根据 Sheet2 的行号生成正确的 Sheet1 行号即可。使用某些函数 、 或 和 生成引用ROW()
公式ISEVEN()
相当ISODD()
容易MOD()
。FLOOR()
Sheet1 的行数 =31*FLOOR((ROW())/2;1)+42*FLOOR((ROW()+1)/2;1)
从行号到带有INDEX()
函数的实际公式:
=INDEX(Sheet1!A:A;30*FLOOR(ROW()/2;1)+41*FLOOR((ROW()-1)/2;1)+42;1)
(在公式中,您显然需要修改第一个参数的范围以适合您的源数据,以及最后一个参数中的数字,该数字表示范围内的列数)。
由于 Sheet2 的行号是获取 Sheet1 中正确行的主要因素,因此仅当 Sheet1 中的源数据从第 42 行开始并且 Sheet2 中的结果数据从第 1 行开始时,上述方法才有效。如果情况发生变化,您当然可以在每次调用时从公式中减去行偏移量ROW()
(用于 Sheet2 中的偏移量)和/或添加/减去结果行号(用于 Sheet1 中的偏移量变化)。
答案2
以下是如何使用公式进行操作的示例:
我使用 A 列来说明公式核心产生的模式。这从第 2 行开始,因为第 1 行可能包含标题。这将在工作表 2 上,您要在其中构建从工作表 1 中选择的项目列表。A2 中计算目标行号的公式是:
=INT(ROW()/2)*42+INT((ROW()-1)/2)*31
下一个屏幕截图说明了如何使用它从另一张表中实际拉出一个单元格:
我把一些内容粘贴在单元格 A42 中,只复制了一部分,这就是为什么 B 列中只填充了一个单元格。该公式使用 INDIRECT 函数来构建单元格引用。B2 中的公式为:
=INDIRECT("sheet1!A" & INT(ROW()/2)*42+INT((ROW()-1)/2)*31)
工作表 1 的单元格 A42 包含ABC
。