C# で Excel の列名インデックス(AA, AB..)を生成する

Excel の列名インデックスを生成するメソッドです。

 
const int ColumnBase = 26;
const int DigitMax = 7; // ceil(log26(Int32.Max))
const string Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

/// <summary>
/// 文字列のインデックスを取得する
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public static string IndexToColumn(int index)
{
    if (index <= 0)
    {
	throw new IndexOutOfRangeException("インデックスは正数を指定してください。");
    }

    if (index <= ColumnBase)
    {
	// 26文字目までは単純にインデックスから取得。
	return Digits[index - 1].ToString();
    }

    // 26文字以降の処理。
    var sb = new StringBuilder().Append(' ', DigitMax);
    var current = index;
    var offset = DigitMax;
    while (current > 0)
    {
	// 末尾となる文字列のインデックスをセット。
	sb[--offset] = Digits[--current % ColumnBase];
	current /= ColumnBase;
    }
    // 整形して返却。
    return sb.ToString(offset, DigitMax - offset);
}

使用例。

 
for (int i = 1; i < 1000; i++)
{
    var col = IndexToColumn(i);
    Console.WriteLine(col);
}

参考;Integer to Alphabet string (“A”, “B”, …“Z”, “AA”, “AB”…)

このブログの人気の投稿

コピーした行の挿入が表示されない時はフィルタされていないかチェック

Excel で一部の図形だけ固定する