Line Buffer Overflow…

書くことが多過ぎるとき、バッファーとしてこちらに書きます。不定期更新です。

XFD…

「なんの呪文?」 って疑問は、さておいて…

 

今、ExcelVBAをやってて、欲しい能力があります。

 

「アルファベットを、さっと数字に変換する能力」

Aなら1、Bなら2ときて、Zなら26です。

10がJ、15がOなんですけど、その後があやふやで。

Tは20かな?

Vは22?

Xは24だったっけ??

 

何に使うのかというと、

VBAでセルの横方向に、データを記入すること」

 

Excelをよくみると…

f:id:kiha-gojusan-hyakusan:20180307225422j:plain

 縦方向には数字が振ってあり、横方向にはアルファベットが振ってあります。

これが、セルの場所を示すのです。

 

例えばこれは、

f:id:kiha-gojusan-hyakusan:20180307225653j:plain

 「Z2」。

上から2番目、左から26番目を表します。

その隣、27番目は「AA」。

さらに、703番目は「AAA」になります。

 

ただ、プログラムでセルを扱おうとすると、文字よりも数値にしたくなるわけで。

「cells(r,c)」で、数値を使ってセルを表すことが出来ます。

 

この時の、見た目のセル番地とプログラムでの左からの番号を、ササッと脳内変換したいわけです。

 

例えば、先ほどの「AAA」の計算は、

「A~Zの26個に、AA~ZZの676個を加えた、702番目「ZZ」の隣」

になりますね。

 

時々使うのが、ループとの組み合わせ。

変数を変化させて、セルに同じ処理を施します。

「For Each~Next」という、片っ端からセルを指定する方法もありますが、飛び飛びにセルを指定したり、添え字付きの配列変数と組み合わせる時など、「Cells」が有効な場面もあります。

 

で、こちらが、セルの一番右です。

f:id:kiha-gojusan-hyakusan:20180307230703j:plain

これ以上は、セルがありません。

 

計算で数値にすると、

「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」では、どうなんでしょうね。