Excel VBA で列番号を英文字に変換する方法でエラーが出たので対応してみた

2013年3月12日火曜日

tips vba

t f B! P L
Microsoftさんが書いていたものが、英文字2桁までしか対応しておらず、注意が必要となっていたので、対応してみました。


ConvertToLetter関数をそのまま使うと、702列を超えたタイミングでエラーになると思います。
戻り値を見ると、"[A"という値が返ってきています。

というわけで、修正版関数を作ってみました。

(想像以上に修正点がなくって、iAlphaの値が26より大きい場合、再帰的に同じ関数を呼び出すようにしただけです)



Public Function ConvertToLetter(ByVal iCol As Integer) As String
    Dim iAlpha As Integer
    Dim iRemainder As Integer
    iAlpha = Int((iCol - 1) / 26)
    iRemainder = iCol - (iAlpha * 26)
    If iAlpha > 0 Then
        If iAlpha > 26 Then
            ConvertToLetter = ConvertToLetter(iAlpha)
        Else
            ConvertToLetter = Chr(iAlpha + 64)
        End If
    End If
    If iRemainder > 0 Then
        ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
    End If
End Function

数値→英文字に変換する考え方は、Microsoftのページ参照でお願いします。

これだけの修正であれば、最初から実装しておいてくれればよかったのに、とかちょっと思った。

QooQ