読者です 読者をやめる 読者になる 読者になる

Still Life

残念IT系母ちゃん。旦那さん、娘1歳、猫の4人暮らし。

VBAで、数値で取得したColumnをアルファベットに変換する その2

ずいぶん前になりますが、同タイトルで記事を書きました。(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"を取り除くだけです。