「なんの呪文?」 って疑問は、さておいて…
今、ExcelVBAをやってて、欲しい能力があります。
「アルファベットを、さっと数字に変換する能力」
Aなら1、Bなら2ときて、Zなら26です。
10がJ、15がOなんですけど、その後があやふやで。
Tは20かな?
Vは22?
Xは24だったっけ??
何に使うのかというと、
「VBAでセルの横方向に、データを記入すること」
Excelをよくみると…
縦方向には数字が振ってあり、横方向にはアルファベットが振ってあります。
これが、セルの場所を示すのです。
例えばこれは、
「Z2」。
上から2番目、左から26番目を表します。
その隣、27番目は「AA」。
さらに、703番目は「AAA」になります。
ただ、プログラムでセルを扱おうとすると、文字よりも数値にしたくなるわけで。
「cells(r,c)」で、数値を使ってセルを表すことが出来ます。
この時の、見た目のセル番地とプログラムでの左からの番号を、ササッと脳内変換したいわけです。
例えば、先ほどの「AAA」の計算は、
「A~Zの26個に、AA~ZZの676個を加えた、702番目「ZZ」の隣」
になりますね。
時々使うのが、ループとの組み合わせ。
変数を変化させて、セルに同じ処理を施します。
「For Each~Next」という、片っ端からセルを指定する方法もありますが、飛び飛びにセルを指定したり、添え字付きの配列変数と組み合わせる時など、「Cells」が有効な場面もあります。
で、こちらが、セルの一番右です。
これ以上は、セルがありません。
計算で数値にすると、
「A~Zの26、AA~ZZの676、AAA~WZZの15,548、XAA~XEZの130、XFA~XFDの4を加えた数」
つまり、「16,384」。
これが、広大なExcel空間の、右の果てなのです。
ちなみに、下の果ては、もっとあります。
16,384は2の14乗ですが、下の果ては、なんと2の20乗!
「1,048,576」
つまり、「XFD1048576」が、Excelの最後のセルなのです。
この中に、約171億個のセルが、最初に空のファイルを作った時に、既に準備されているのですね。
何だかものすごい話です。
ただ、昔のファイル「xls」では、横方向に不用意に広げすぎると、ファイルが肥大化して、遅くなるって聞いたことがありました。
今の「xlsx」では、どうなんでしょうね。