如果您有一个称为“数据表”的源表,请将此公式放在每个单元格的额外工作表上(应在其中显示打印数据):
=OFFSET(datatable!$A$2;(ROW()-2)+((COLUMN()-1-MOD(COLUMN()-1;3))/3*4);MOD(COLUMN()-1;3))
(以上是从德语翻译成英文的测试德国公式为:。 =BEREICH.VERSCHIEBEN(datatable!$A$2;(ZEILE()-2)+((SPALTE()-1-REST(SPALTE()-1;3))/3*4);REST(SPALTE()-1;3)))
预期结果:
这将转换工作表“数据表”的内容:
A1 B1 C1
A2 B2 C2
A3 B3 C3
A4 B4 C4
A5 B5 C5
A6 B6 C6
...
变成:
A1 B1 C1 A5 B5 C5 ...
A2 B2 C2 A6 B6 C6 ...
A3 B3 C3 ...
A4 B4 C4 ...
说明:
基本:
例如OFFSET( datatable!$A$2; 3; 4 ),相对于$A$2,向下3行,向右4列引用单元格。
ROW()和COLUMN()是代表当前工作表在当前工作表中位置的数字(例如$A$1=第1列/第1行,$C$2=第3列/第2行)。
在(-1)遍地都是必要的,因为我们使用的偏移,且第一行和列是1,但我们希望第一个引用的单元格是$A$2,不$A$2加偏移1。
该(ROW()-2)是在输出- /打印表格标题(它应和-1,如果你没有一个标题)。
$A$2用于源“数据表”中的标题。如果没有标题,则应使用$A$1(而不是$A$2)引用。
细节:
第三个参数OFFSET(...;...;MOD(COLUMN()-1;3))是列偏移量,它将始终引用源“数据表”的前三列之一。
那就是$A$2列偏移量0,1,2,0,1,2,0,1,2,...
在第二个参数中OFFSET(...; (ROW()-2) + ((COLUMN()-1-MOD(COLUMN()-1;3))/3*4) ;...)选择行偏移量。
基本上,这里的数学是y + x * 4。
4是要显示的行数。
3是源“数据表”中的列数。
x由列构成,模3
COLUMN()-1为0、1、2、3,...,依此类推。
MOD(COLUMN()-1;3)将为0、1、2、0、1、2、0、1、2 ...
COLUMN()-1-MOD(COLUMN()-1;3)将是0、3、6、9,...,依此类推,其中值仅每3列更改一次。
除以3将得出0、1、2、3,...
与4相乘将得出0、4、8、12,...
(有关Modulo的说明,另请参阅MOD()excel帮助或Wikipedia中的模运算)
(感谢Jake Kacher的基本想法)