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