やりたいこと
Excelの帳票作成時に、**n列目のExcelの横軸のアルファベットって何?となった時に使用する変換です。
またその逆でこのアルファベットはn列目?もあります。
組み合わせればA列からn番目の列のアルファベットは何?**が可能です。
Excelの帳票作成用なので0以下は考慮しません。
整数のみの前提です。
数値からアルファベットへ変換
入力例 |
出力例 |
1 |
A |
2 |
B |
26 |
Z |
27 |
AA |
28 |
AB |
52 |
AZ |
53 |
BA |
private string ConvertAlphabet(int index)
{
string result = string.Empty;
//26より大きい場合は繰り返す
do
{
//対象を26で割った余り
int amari = index % 26;
//対象を26で割った商
int sho = index / 26;
//割り切れた時(Zを出すため)
if (amari == 0)
{
amari = 26;
sho--;
}
//余りの数のアルファベットを出力
result = ((char)((int)'A' + amari - 1)).ToString() + result;
//商を次の対象とする
index = sho;
}
while (index > 26);
//残りのアルファベットを出力
result = ((char)((int)'A' + index - 1)).ToString() + result;
return result;
}
アルファベットから数値へ変換
入力例 |
出力例 |
A |
1 |
B |
2 |
Z |
26 |
AA |
27 |
AB |
28 |
AZ |
52 |
BA |
53 |
private int ConvertInt(string alphabet)
{
int index = 0;
int length = 0;
foreach (char c in value)
{
//最後の1文字は処理しない
if (length == value.length - 1)
{
break;
}
index += 26 * ((int)c - (int)'A' + 1);
length++;
}
index += (int)c - (int)'A' + 1;
return index;
}
参考
10進数をn進数に変換する計算式