1から30までを12列で並べる
前回は、名簿を段組みにする100本ノックに挑戦した。
infoment.hatenablog.com
今回は、段組みについてのお話。
例えば、1から30までの数字を、12列で折り返して並べたいとする。
こんな感じだ。
このとき、30番目の数が何行何列目に来るか知るには、どのような方法が
あるだろうか。やってみた。
1. IF関数を駆使する。
- 行・・・数が1なら1行目。列数が1なら、前の列数に1を足す。
それ以外は、一つ前と同じ。 - 列・・・数が1なら1列目。前の列数が12なら、1に戻る。
それ以外は、一つ前に1を足す。
実際、式をセットするとこうなる。
テーブルに式をセットしたので、だいぶん複雑になってしまった。理屈としては
一番簡単だが、式の可読性という点では今一つか。
2. 余りを利用する。
12で割ったときの余りで、列数を求める。ただし、12列目は余りが0になって
しまい都合が悪いので、1引いた値を12で割った余りをもとめ、それに1を
足し直すことで列数を求める。
行数は、12で割った商を小数点第一位で切り上げることで求める。
実際、式をセットするとこうなる。
式としてはかなりシンプルになった。ただし、
「1引いた値を12で割って、余りに1を足す」
の部分が、ちょっと難しいかもしれない。
3. 12進数にする。
1から12が繰り返し現れるわけだから、12進数の一桁目が列数で、
二桁目以上が行数になる。11の一桁目がAに、12の一桁目がBに
なるので、結構ややこしい。なお、各変換には以下の関数を用いる。
- 10進数 ⇒ 12進数 BASE関数
- 12進数 ⇒ 10進数 DECIMAL関数
実際、式をセットするとこうなる。
今回の中でもっとも複雑な式となっていて、しかも一番難解なものに
なってしまった。
でも、嫌いじゃないかも。実際の場面でどの方式を採用するかは、
時と場合と、各位のお好みで。
参考まで。