Excel : してログ

エクセルのセル番号「A1」とか、アルファベットが列、数字が行というやつ。 アルファベットの部分をプログラムで扱う場合は、数字で管理しないとやりにくい。 そこで今日、その変換ルーチンを書いていたんですが、どうもうまくいかない。 二桁程度だとロジックも簡単なのだが、一般化しようと思って任意の桁に拡大した途端、難易度が段違いに上がる。 というか、断念してしまいました。

基本は、アルファベット26文字による26進数への変換となるはずなのですが、そうすると A~Z までは OK、その次が BA となる。 なぜかというと、ゼロが無いから。 よく考えると、ゼロのない26進数となっているのだが、アルファベット表記なため、それに気づきにくい。 話を簡単にするために、1~3 のゼロなし3進数とすると、1、2、3、11、12、13、21... というような並びになる。 従って、ゼロのある頭でロジックを考えた結果、Z の次が BA になる訳だ。

というところまで分かって、ゼロなしの26進数への変換ロジックを考えてみる。 これが、予想以上に難解で3桁の直前の YZ までできる関数しか出来ませんでした。 ので、ソースはありません。

代わりに、PHPExcel のスタティック関数(PHPExcel_Cell::stringFromColumnIndex)を使うことにしました。 PHPExcel のライブラリをインクルードすれば、静的関数なのですぐに使えます。 今度、ソースコードを覗いて、どんなロジックで変換しているのか勉強してみようと思います。