答案1
此解决方案有点通用。假设您的源表位于 B2:D5。这样,您可以将其调整到位于工作表任何位置的表。而从 A1 开始的表可能需要使用一些快捷方式。
将以下两个公式分别放入G3和H3中:
=IFERROR(INDEX($B$2:$D$2,MOD(ROWS($G$3:G3),COUNTA($B$2:$D$2)+1)),"")
=IFERROR(INDEX($B$3:$D$5,ROUNDUP((ROWS($H$3:H3))/(COUNTA($B$2:$D$2)+1),0),MOD(ROWS($H$3:H3),COUNTA($B$2:$D$2)+1)),"")
第一个公式使用 mod 函数生成计数器。随着公式向下复制,$G$3:G3 变为 $G$3:G4,ROWS 函数返回第一行的 1、第二行的 2,依此类推。调整 $G$3:G3 为表格的起始单元格。countA 函数用于确定有多少列。$B$2:$D$2 范围需要调整以适合您的列标题。您不能有任何空白标题。需要 +1 来将列数增加 1,以便在组之间创建空白行。
mod 函数嵌套在 INDEX 函数 $B$2:$D$2 中。它将计算一系列代表要查找的列的数字,翻转为零并重复。当 mod 返回 0 值时,INDEX 无法处理它并生成错误。通过将其嵌套在 IFERROR 函数中,可以抑制错误值并返回“”。从视觉上看,它看起来像一个空白,但单元格中仍然有一个公式。
第二个函数与第一个函数基本相同,只是不是指向 1D 范围中的标题行,而是在 INDEX 中使用表格的其余部分来表示 2D 范围 $B$3:$D$5。由于它是 2D 范围,因此需要告知 INDEX 要查找哪一行以及要查找哪一列。由于第一个公式中有一部分已经处理了要查找哪一列,因此可以直接复制过去。为了确定要查找哪一行,第二个公式的这一部分执行以下操作:
ROUNDUP((ROWS($H$3:H3))/(COUNTA($B$2:$D$2)+1),0)
再次将 $H$3:H3 更改为第二列的起始单元格,并将 $B$2:$D$2 更改为与列标题行匹配。
现在,当选择位于另一个工作表上的范围时,范围将以工作表名称开头,后跟 ',后跟您的范围。当您输入公式并导航到另一个工作表时,Excel 将自动为您执行此操作。
以下是工作表 Sheet1 上的区域的示例
Sheet1!B3:D6
请注意,名称中没有空格。如果工作表名称中有空格,例如名为 RED BLUE 的工作表,则引用将如下所示:
'RED BLUE'!B3:D6