最近、わけあってExcelを使い込んでいる。
今日はExcelネタでご機嫌を伺います。
49
Excelの横の並びは行という。
英語でrowである。
下に行くほど行数が増える。

縦の並びは列という。
英語でcolumnである。
右へ行くほど列数が増える。

数学の行列と同じ呼び方だが、どっちが行でどっちが列か、すぐ分からなくなる。
こんなの人間同士の決め事なので、合理的な理由があるわけではなく、鵜呑みにするしかない。

何回か書いたことだが、高校の数学の先生に、行という字は旁(つくり)のテ形の上二本が印象的だから横。
列という字はリ形の右二本が印象的だから縦。
そう習った。
アハハ、しょうもねー。
習った時はそう思ったのだが、一生忘れない。
いわゆる「学校の数学なんか役に立たない」という俗説と対極の事象であって、そのときの先生には感謝している。

Excelの行数は、1から始まる10進数である。
下に2、3…と増えていく。
普通コンピューターはゼロ始まりだと便利なのだが、ここは消費者におもねっていて、1始まりである。
この行数がわりと最近まで(Office 2003まで)65536行までしか行けず、ちょっとした用だとすぐに足りなくなるので困っていた。
2^16(2の16乗)である。
しかし最近は1,048,576行まで使えるようになった。
2^20である。
微妙にハンパな感じがするが、百万行であり、グッと便利になった。

列数は、Aから始まるアルファベットである。
右にB、C…と増えていく。
いちばん左上のセルはA1セルという。
これが使いづらい。
行番号と、列番号と、両方数字にしてもらいたい。
特に消費者が使いやすくしたとも思えず、謎仕様である。
会計上の風習とか、ぼくなんかの預かり知らぬ由来があるのだろうか。

とっさに10列目は何か、と聞かれても分からない。
これ、VBAでプログラミングするとき結構使うのである。
ジューだからJ(ジェー)、と覚えておくといい。
20列目はTwentyだからT、と言っている人もいた。
この2つを覚えておくと結構はかどる。
Kだったら10+1で11。
Sだったら20-1で19。
簡単でしょう。

列もExcel 2013までは256しかなかった。
2^8である。
これはショッキングに少なくて、いろいろ使いづらかった。
今は16,384列だそうだ。
2^14である。
これも微妙に気持ち悪い感じだが、これだけあればまず困らない。

さて、この列番号だが、1列目がA、2列目がB、3列目がC・・・と続いて、26列目がZになったら、27列目がAAである。
26列目がZ、27列目がAA。
52列目がAZ、53列目がBA。
78列目がBZ、79列目がCA。
このへんは26刻みである。
702列目がZZで、703列目がAAA。

これ、簡単に計算で求められるのだろうか。
AからZまで、26種類の数字を持つ、26進数と考える。

1000列目の名前は何だろうか。
1000を26で割ると、38あまり12である。
38を26で割ると1あまり12である。

 1000 = 1x26x26 + 12x26x26 + 12

となる。
よって、先頭から 1・12・12だからALLと考えられる。
本当だろうか。

列の名前は

 =ADDRESS(1, 列数, 4)

というExcel関数で求められる。

 =ADDRESS(1, 1000, 4)

と入力すると、ALL1になったので、この考え方で合ってるっぽい気がする。
千列目はALL(オール)ってすごく覚えやすい。

1万列目の列名は何か。

 10000 = 14x26x26 + 20x26 + 16

ということで、14・20・16で、NTPのような気がする。
NTPというとNetwork Time Protocolと言ってインターネットで時計を合わせる規格のことだが、それと1万列という数字がいまいち関連付けられない。

 =ADDRESS(1, 10000, 4)

と入力するとNTPになる。
よって、普通の10進=>26進の底(てい)の変換で行くっぽい。
へぇー。

16384列はどうだろう。

 26) 16384
 ------------
 26) 630・・・4
 ------------
 26) 24・・・6

 16384=24x26x26 + 6x26 + 4

だから、24・6・4で、XFDのような気がする。

 =ADDRESS(1, 16384, 4)

と入力すると確かにXFD1になる。

 =ADDRESS(1, 16385, 4)

だと#VALUE!というエラーになるから、たしかにXFD列=16384列がExcelの右の限界、極右セルのようだ。

逆に列名から番目は分かるだろうか。
たとえばCCC列が何列目か計算してみる。
C列は3列目だから、

 3x26x26 + 3x26 + 3 = 2109

で2109列目のような気がする。

 =ADDRESS(1, 2109, 4)

と計算すると、たしかにCCC1になる。
へぇー。