ずいぶん前になりますが、同タイトルで記事を書きました。(http://d.hatena.ne.jp/Aodrey/20110609/1307601687)
最近、kuro様よりコメントをいただきまして、カラムが"Z"を含むときには動作しないとのご指摘をいただきました。
確かめてみたらあらびっくり。なんてひどい間違いを堂々と1年以上も掲載していたことか!
ご指摘本当にありがとうございますm(_ _)m
これにくじけずに、日本のブログ記事の底上げを目指すべく(?)、細々とレベルの低い記事でも恥も外聞もなくさらし続けます!
さて、今更感いっぱいですが、前回の修正版をアップします。
Function getAlphabetFromColumn(col As Long) As String getAlphabetFromColumn = getSimpleAlpha("", col) End Function Private Function getSimpleAlpha(prefix As String, c As Long) As String Dim alpha As String Dim leftover As Long Dim residues As Long If c = 0 Then alpha = "Z" Else leftover = (c - 1) \ 26 If leftover > 0 Then residues = c Mod 26 alpha = getSimpleAlpha(getSimpleAlpha("", leftover), residues) Else residues = 0 alpha = Chr(c + 64) End If End If getSimpleAlpha = prefix & alpha End Function
御指摘いただいた通り、leftover = (c - 1) \ 26 でZ列も大丈夫。
でもこれだと2文字目以降のCがゼロになってしまうので、その対策も。
ほんと複雑になって嫌ですね。でも1年経ったわたしはこれを見て思いました。
Function getAlphabetFromColumn2(col As Long) As String getAlphabetFromColumn2 = Replace(Replace(Cells(1, col).Address, "$", ""), 1, "") End Function
これでいいんじゃないか?
やっているのは、「知りたいカラム数の1行目」のアドレスを求め、絶対参照をあらわす"$"と1行目の"1"を取り除くだけです。