作者: Hiroshi Shinohara
日時: 2003/10/21(20:10)
  風つかいです。
  面白いネタですね。 Icon版を考えてみました。
  折角ですので、逆変換も作ってみました。

-----^ EXCEL2N.ICN ( date:03-10-21 time:20:03 ) ------------<cut here
####################
# エクセル風列番号(A-Z,AA-ZZ,..) <-> 数(1- )
####################
# Excel2n.icn Rev.1.1 2003/10/21 風つかい
# TSabc
# This file is in the public domain.

procedure main()
  # テストデータ
  L := ["A","B","Z",                         # Z:26^1
        "AA","AB","AZ","BA","YZ","ZA","ZZ",  # ZZ:26^2+26^1
        "AAA","AAB","ZYZ","ZZA","ZZY","ZZZ", # ZZZ:26^3+26^2+26^1
        "AAAA","ZZZZ",                       # ZZZZ:26^4+26^3+26^2+26^1
        "AAAAA","ZZZZZ"]                     # ZZZZZ:26^5+26^4+26^3+26^2+26^1

  # 動作テスト
  every s := !L do {
    # 変換
    writes(s," -> ",n := excel2n(s))
    # 逆変換
    write(" -> ",n2excel(n))
  }
end

####################
# Excel風列番号(A-Z,AA-ZZ,..) -> 数(1- )
####################
procedure excel2n(s)
  n := 0                     # ↓文字→数変換
  every i := 1 to *s do n +:= (ord(s[i]) -ord("A") +1) * (26^(*s -i))
                         # ↑ nに足し込む
  return n
end

####################
# 数(1-) -> Excel風列番号(A-Z,AA-ZZ,..)
####################
procedure n2excel(n)
  L := []              # テンポラリ list
  while n1 := n-1 do { # 26で割った余りは 0〜25なので、後で +1して 1〜26にする
                       # ために 一旦 -1 しておく
    n2 := n1 / 26                          #    ↓余り    ↓戻し
    n3 := n - n2*26    # 最下位桁(1〜26)   # (n-1) -n2*26 +1
    put(L,n3)          # listの末尾へ追加
    n := n2            # 次の桁の計算のため
    if n = 0 then break
  }

  # 文字へ変換
  s := ""    # ↓listの末尾から取り出す
  while n4 := pull(L) do s ||:= char(ord("A") + n4 -1)
                       #    ↑  ↑数→文字変換
  return s             #    ↑ sに足し込む
end
-----$ EXCEL2N.ICN ( lines:54 words:191 ) ------------------<cut here

  動かすとこんな結果になります。
  将来ともこんなに列は増えないと思いますが。
-----^ EXCEL2N.1 ( date:03-10-21 time:20:03 ) --------------<cut here
A -> 1 -> A
B -> 2 -> B
Z -> 26 -> Z
AA -> 27 -> AA
AB -> 28 -> AB
AZ -> 52 -> AZ
BA -> 53 -> BA
YZ -> 676 -> YZ
ZA -> 677 -> ZA
ZZ -> 702 -> ZZ
AAA -> 703 -> AAA
AAB -> 704 -> AAB
ZYZ -> 18252 -> ZYZ
ZZA -> 18253 -> ZZA
ZZY -> 18277 -> ZZY
ZZZ -> 18278 -> ZZZ
AAAA -> 18279 -> AAAA
ZZZZ -> 475254 -> ZZZZ
AAAAA -> 475255 -> AAAAA
ZZZZZ -> 12356630 -> ZZZZZ
-----$ EXCEL2N.1 ( lines:20 words:100 ) --------------------<cut here

風つかい(hshinoh@...)
IconのWWWは、  http://www.cs.arizona.edu/icon/
UniconのWWWは、http://unicon.sourceforge.net/index.html
BGM: ふたりのビックショー 〜 TALK百歌 Vol.9 / 篠原美也子 & 奥井亜紀