我有一行,其中单元格之间的间距均匀。我希望该行中的每 8 个单元格引用另一张表中的单元格,其中单元格之间没有空格。我在这一行中有很多数据,所以我不想做任何会减慢已经很大的文档速度的事情,也不想使用 VB 代码。
答案1
以下是如何实现这一目标的要点。
假设 Sheet1 上的源值位于第 3 行,从 C 列开始;因此 C3、D3、E3 等。显示单元格位于 Sheet 2 的第 5 行,从 B 列开始,然后每 8 个单元格显示一个,因此 B5、J5、R5 等。我特意使用了不同的行和起始列来进行说明。对于您的情况,这可能更简单。
因此,您希望 B5 显示 C3、J5 显示 D3、R5 显示 E3 等。有两种常用方法可以实现此目的:使用 OFFSET 或 INDIRECT。我将分别说明这两种方法。
列计算:对于这两种情况,您都需要计算列增量的数量(Sheet2 上的增量为 8,而 Sheet1 上的增量为 1)。计算公式如下:
(COLUMN()-COLUMN(B5))/8 or in this example:
(COLUMN()-2)/8
空的 COLUMN() 函数返回其所在单元格的列。对于 Sheet2 上的每个显示单元格,其列减去系列中的第一列,再除以 8,即可得出 Sheet1 上的列增量数。
为了抵消,您可以像这样使用它。sheet2 单元格中的公式将是:
=OFFSET(sheet1!C3,0,(COLUMN()-2)/8,1,1)
OFFSET 从锚点单元格(此例中为 C3)开始工作,然后偏移 0 行,偏移上述公式计算的列数,并返回 1 行 1 列大小的结果(单个单元格)。
间接将您构建的内容(从文本和计算)转换为地址。对于此功能,您需要添加锚点来定位实际单元格地址。INDIRECT 允许您使用另一种方便计算列的地址规范样式;它将列称为数字而不是字母。单元格 C3 将是 R3C3,即第 3 行、第 3 列。
添加锚点的列将使列计算如下所示:
(COLUMN()-COLUMN(B5))/8+COLUMN(sheet1!C3) or in this example:
(COLUMN()-2)/8+3
通过连接文本和计算数字来构建单元格引用:
=INDIRECT("sheet1!R3C"&(COLUMN()-2)/8+3,false)
“false”表示单元格引用为“R1C1”样式。
在 Sheet2 的第一个显示单元中设置任一公式,并根据电子表格布局进行调整。然后将其复制到其他每个显示单元中。