Hatena::ブログ(Diary)

つまみ食う このページをアンテナに追加 RSSフィード Twitter

2008-05-18

エクセルの1000列目は ALL

ちょっとエクセルマクロを作っていて、

数字をエクセルの列名に変換する関数を何気なく作った。


それだけなんだけど、

なんとなく1000列目の列名を変換したら ALL って出てくる。

A-Zまでの26進数で1000まで数えたらそうなるってだけだけど、

なんかちょっとドキッとした。


'# 列番号を列名に変換する
'# 1=A, 2=B ... 26=Z, 27=AA, 28=AB ... 256=IV ... 1000=ALL
Public Function Num2Col(ByVal n As Long) As String

    Dim buf As String
    
    Do While n > 0
        buf = Chr((n - 1) Mod 26 + 65) & buf
        n = Int((n - 1) / 26)
    Loop
    
    Num2Col = buf

End Function


'# 列名を列番号に変換する
'# A=1, B=2, ... Z=26, AA=27, AB=28 ...IV=256
Public Function Col2Num(ByVal s As String) As Long

    s = UCase(s)

    Dim n As Long, i As Integer
    For i = 1 To Len(s)
        Dim c As String * 1: c = Mid(s, i, 1)
        If "A" <= c And c <= "Z" Then
            n = n * 26 + (Asc(c) - 64)
        Else
            Exit For
        End If
    Next
    
    Col2Num = n

End Function
Connection: close