如果您有一个称为“数据表”的源表,请将此公式放在每个单元格的额外工作表上(应在其中显示打印数据):
=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的基本想法)