C++でExcelの列番号をアルファベット列名に変換する方法
Excelの列番号はアルファベットで表現されます。Aから始まり、Zの次はAA、ABと続き、ZZの後はさらにAAA、AABへと進んでいきます。つまり、1列目が「A」、26列目が「Z」、27列目は「AA」という対応関係になります。本記事では、数値として与えられた列番号から、対応する列名(アルファベット)を求めるアルゴリズムをC++で解説します。例えば、列番号が80の場合、対応する列名は「CB」となります。
変換アルゴリズムの考え方
数値nが与えられたとき、まずnを26で割った余りを求めます。ここで処理の分岐が発生します。
- 余りが0の場合: その数値は26、52のように26の倍数に相当するため、出力文字列に「Z」を追加し、nを (n / 26) − 1 に更新します。
- 余りが0以外の場合: 余りに応じたアルファベット((rem − 1) + 'A')を文字列に追加し、nを n / 26 に更新します。
この処理をnが0になるまで繰り返した後、文字列を反転させると、目的の列名が完成します。例えばn = 28の場合、余りは2となるため「B」を追加してn = 1、次に余り1から「A」を追加してn = 0。反転すると「AB」が得られます。
主な変換例
| 列番号 | 列名 |
|---|---|
| 1 | A |
| 26 | Z |
| 27 | AA |
| 28 | AB |
| 52 | AZ |
| 53 | BA |
| 700 | ZX |
| 702 | ZZ |
| 703 | AAA |
C++での実装例
#include<iostream>
#include<algorithm>
using namespace std;
void showColumnLetters(int n) {
string str = "";
while (n) {
int rem = n%26;
if (rem==0) {
str += 'Z';
n = (n/26)-1;
}
else{
str += (rem-1) + 'A';
n = n/26;
}
}
reverse(str.begin(), str.begin() + str.length());
cout << str << endl;
}
int main() {
int n = 700;
cout << "Cell name of " << n << " is: ";
showColumnLetters(700);
}
コードのポイント
- whileループ内でnが0になるまで26進数的な除算を繰り返し、下位の桁(右側の文字)から順に決定していきます。
- rem == 0 のケースでは桁借りが発生するため、nを1減らしてから次の桁へ進む点が重要です。
- 最後にreverse関数で文字列を反転することで、左から順に並んだ正しい列名になります。
入力
Cell number: 700
出力
Enter cell number:700 Cell name of 700 is: ZX
このように、26進法を応用したシンプルな除算と余りの計算だけで、任意の列番号をExcelの列名に変換できます。大きな列番号に対しても線形時間で動作するため、実用的な実装となっています。
-
C++で五胞体数(ペンタトープ数)を求める方法
五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の
-
Excel VBAで列番号を列文字に変換する3つの方法
VBAマクロは、Excelであらゆる操作を実行する際に最も効果的で、迅速かつ安全な方法です。この記事では、VBAを使用してExcelで列番号を列文字(A、B、C…)に変換する方法をご紹介します。 練習用ワークブックのダウンロード 無料の練習用Excelワークブックはこちらからダウンロードできます。 VBAで列番号を列文字に変換する3つの方法 このセクションでは、特定の列番号を列文字に変換する方法、ユーザー定義関数(UDF)を作成して変換する方法、そしてユーザーが入力した列番号を列文字に変換する方法の3つを、VBAを使って学びます。 1. 特定の列番号を列文字に変換するVBA VBAで特定