↑こういう表を、↓みたいにしたいと。
明治時代から続く、定番中の定番質問です。まぁ、実際にはもっとデータが多いのでしょう。確かに、意外と面倒くさいです。こうした変換は、一般的に関数でやる方法が紹介されますが、ここでは、関数を使わない手動操作による方法と、関数による方法の両方を解説します。
最初にお断りしておきます。この手動操作による方法は、Excel 2007以降でしかできません。試してみましたが、Excel 2003までではできませんでした。あ、もちろん、Excel以外のアプリを使えば可能ですし、正直な話、私がやるときは秀丸エディタを使うと思います。マクロや関数を使うより簡単ではないかと。
手順が多くて、面倒くさいですね。何とか、Excelの標準機能だけ(関数を除く)で実現しようとしたら、こうなってしまいました。まぁ、できるのは間違いありません。ただし、Excel 2007以降です。Excel 2003までのテキストボックスでは、上記の手順6で貼り付けができません。
上のように参照するには、次のような計算式を入力します。
列番号のABCを計算で作成するのは面倒くさいので、ここはOFFSET関数で考えます。
こうした関数を1つずつ入力するのは現実的ではありません。最初の数式を作成して、下方向にコピーすれば、自動的に適切な数式が作成されると便利です。そのためには、OFFSET関数の引数が
0,0
1,0
2,0
0,1
1,1
2,1
0,2
1,2
2,2
::
と、自動的に変化しなければなりません。まず、0→1→2の繰り返しを計算で作ってみましょう。
これには、最初に数式を入力するセル(ここではセルA6)の行番号が重要になります。各行の行番号と、求めたい数値の関係は次のようになります。
こんなときは、行番号をある数値で割った余りに注目します。
数式が入力されているセルの行番号はROW関数で分かります。また、ある数値で割った余りはMOD関数で求められます。
さて、0→0→0→1→1→1→2→2→2という数値は、どんな計算で作成できるでしょう。今度は、ある数値を割った商(答え)を使います。
つーことです。日付の書式設定が反映されていませんので、コピー先のセルに、必要な書式を設定してください。
なぜ3で割るのか?とか、最初のセルが6行目じゃなかったら?などは、それほど難しくありませんので、ぜひ自分で考えてください。仕組みが分かれば応用できますし、逆に、仕組みが分からないようなら、実務で応用することはできません。