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); }