Excelのセル参照文字を作成する。(Excel2007の16384列目まで対応)

Excelのセル参照文字(A1やB2など)は列をアルファベットで表します。


数値で表すR1C1参照形式もありますが今日は1・2・3という列番号からA・B・Cという列参照文字を取り出してみます。アルファベットが26種類であるため26列目まではA-Z、27列目からはAA、AB、AC・・・703列目(26の2乗+26+1)からはAAAとなっていきます。(Excelの列数は以前は256列(参照文字:IV)が上限でしたが、Excel2007からは列数の上限が16384列(参照文字:XFD)に拡張されています。)


考え方としては列番号を26になるまで除算しつつ、余りを文字に変換していきます。


1 ÷ 26 = 0 余り 1 = A
2 ÷ 26 = 0 余り 2 = B




26 ÷ 26 = 1 余り 0 = Z
27 ÷ 26 = 1 余り 1 = AA


但し、余りが0の場合はZになるようにし桁があがらないようにする必要があります。この考え方は、702=ZZでも同様です。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ExcelColRowRefStr
{
class Program
{
static void Main(string[] args)
{

for(int i=1; i<=27; i++){
Console.WriteLine(string.Format("{0}:{1}", i.ToString(), ColumnIndexToRefStr(i)));
}
Console.ReadLine();

}

public static string ColumnIndexToRefStr(int columnIndex){

// 変換の基準となるアルファベットの数とASCIIコード
const int ALPHABET_COUNT = 26;
int asciiFirstIndex = Convert.ToInt32('A');

// アルファベットの数で0になるまで割り続ける
int tempIndex = columnIndex;
string refStr = string.Empty;
while (tempIndex > 0)
{
// 剰余を求める
int modIndex = tempIndex % ALPHABET_COUNT;

if (modIndex == 0)
{
// 0 の場合はZに設定し、桁が増えないよう1減算する
modIndex = ALPHABET_COUNT;
tempIndex--;

}

// アルファベットの数で除算する
tempIndex = tempIndex / ALPHABET_COUNT;

// 剰余をアルファベットに変換して参照文字とする
refStr = Convert.ToChar(asciiFirstIndex + modIndex - 1).ToString() + refStr;

}

return refStr;

}

}
}

実行結果


1:A
2:B
3:C
4:D
5:E
6:F
7:G
8:H
9:I
10:J
11:K
12:L
13:M
14:N
15:O
16:P
17:Q
18:R
19:S
20:T
21:U
22:V
23:W
24:X
25:Y
26:Z
27:AA