「datatable」というソーステーブルがある場合は、次の式をすべてのセル(印刷データが表示される場所)の余分なシートに追加します。
=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)))
期待される結果:
これにより、シート「datatable」のコンテンツが変換されます。
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 ...
説明:
基本:
たとえば、3行下、4列右にOFFSET( datatable!$A$2; 3; 4 )相対的なセルを参照し$A$2ます。
ROW()およびCOLUMN()は、現在のシート内の現在のセルの位置を表す数字です(例$A$1=列1 /行1、$C$2=列3 /行2)。
(-1)オフセットを使用しており、最初の行と列が1であるため、すべての場所が必要ですが、最初に参照されるセルは$A$2、$A$2オフセット1 ではなくである必要があります。
これ(ROW()-2)はoutput- / print-tableのヘッドライン用です(ヘッドラインがない場合は-1になります)。
$A$2ソース「datatable」の見出し用です。見出しがない場合は、$A$1(ではなく$A$2)で参照する必要があります。
詳細:
3番目のパラメーターOFFSET(...;...;MOD(COLUMN()-1;3))は列オフセットで、ソース「datatable」の最初の3列のいずれかを常に参照します。
それは$A$2プラス列オフセット0、1、2、0、1、2、0、1、2、...
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に感謝します)